【python】sqlite使用

官方文档:https://docs.python.org/2/library/sqlite3.html

sqlite教程:http://www.runoob.com/sqlite/sqlite-delete.html

 

安装

linux系统一般自带sqlite不需安装。在终端输入sqlite3,出现如下提示则表示已经安装了sqlite

SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

新建一个数据库:

如下,直接在命令行输入即可

sqlite3 test.db

注意,sqlite会在当前文件目录下生成test.db文件。比如在路径 /home/A/B下生成了test.db,如果想在/home/X/Y目录下使用该数据库,需要加上路径

sqlite3 /home/A/B/test.db

如果没有该文件,sqlite会生成对应文件。

在python中使用sqlite

需要import sqlite3模块,具体使用可以参见上面的链接。主要注意两点:

1.sqlite转义方法

在数据库操作中,经常会用到类似于  select * from ABC where XXX = '%s' % ("""a'bc"d""")的情况。此时%s对应的字符中的引号会导致错误,因此需要转义。一般数据库都会有自己的转义函数。像mysql就有MySQLdb.escape_string() 处理该问题。在sqlite中,用?匹配解决该问题。

即将待插入的值都用?占位,将数据用元组传入。

t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
             ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
             ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
            ]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)

这样避免了引号问题,安全性更好。

2.获取表字段名称与表数据对应关系

在pymongo中,使用coll.find()查找信息得到的都是字典,比如{"a":1,"b":2,"c":3},我们很容易通过字典判断字段的取值情况。但是sqlite给出的结果是列表形式,如[1,2,3]并不给出对应的字段名,如果不清楚有哪些字段很难处理。

可以采用如下方法解决:

#coding=utf8
import sqlite3

conn = sqlite3.connect(dbpath)
cursor = self.conn.cursor()

#获取字段名称
sql = 'pragma table_info(%s)' % tb_name
cursor.execute(sql)
parg = cursor.fetchall()
col_names = [p[1] for p in parg] #获取字段名称
        
#获取数据
sql = 'SELECT * FROM %s' % tb_name
for data in cursor.execute(sql):
    record = dict(zip(col_names, data))  #将字段名称和数据映射为字典

 

posted @ 2016-10-18 14:07  匡子语  阅读(1329)  评论(0编辑  收藏  举报