Python中使用SQLite

sqlite简介

SQLite是一个嵌入式开源数据库,它的应用范围非常广泛,Google的Chrome浏览器,Android的APP开发,iOS的APP开发等等都使用了SQLite数据库。当然Python在2.5以后也内置了对sqlite的支持,模块名称为sqlite3.

以下是Wikipedia对SQLite的描述:

SQLite (/ˌɛskjuːɛlˈlaɪt/[2] or /ˈsiːkwəl.laɪt/[3])是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
SQLite遵守ACID,实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。[4]它作为嵌入式数据库,是应用程序,如网页浏览器,在本地/客户端存储数据的常见选择。它可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用[5]。同时,它有许多程序设计语言的语言绑定。

Python使用sqlite

(这是来自官方网站的一个教程: https://docs.python.org/2/library/sqlite3.html)

首先,创建一个Connection对象来表示数据库。下面我们就创建一个名为 demo.db的数据库:

import sqlite3
conn = sqlite3.connect('demo.db')

如果只是在内存中创建使用数据库不需要保存成文件的话,可以给connect函数提供一个特殊的参数:memory:

创建Connection对象后就可以创建一个Cursor对象了,然后就可以调用cursor的execute()方法来执行SQL语句

c = conn.cursor()

# 创建一个表
c.execute(”’CREATE TABLE stocks
(date text, trans text, symbol text, qty real, price real)”’
)

# 插入一行数据
c.execute(“INSERT INTO stocks VALUES (‘2006-01-05′,’BUY’,’RHAT’,100,35.14)”)

# 保存/提交对数据库的修改
conn.commit()

# 最后关闭connection。
# 一定要确保修改已经提交,不然就会丢失。
conn.close()

通常,你的SQL操作将需要使用Python变量的值。 但不应该使用Python的字符串操作来组合查询,因为这样做是不安全的; 这会让你的程序容易受到SQL注入攻击,看看这个漫画感受一下被SQL注入的后果。

Python读写sqlite数据库

取而代之的是使用DB-API的参数替换,在需要值的地方放一个问号?作为占位符,把所有的值组成一个tuple作为第二个参数传给execute()方法。(其它数据库可能使用不同的占位符,比如%或:1)
如下所示:

# 千万别这样做 -- 太危险啦!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

# 应该这样做
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)

执行一条SELECT语句后遍历数据的方法有多种,可以调用cursor的fetchone()方法来获得一条记录,或者调用fetchall()来得到全部记录的list。也可以把cursor看做一个iterator,比如:

>>> for row in c.execute('SELECT * FROM stocks ORDER BY price'):
        print row

(u’2006-01-05′, u’BUY’, u’RHAT’, 100, 35.14)
(u’2006-03-28′, u’BUY’, u’IBM’, 1000, 45.0)
(u’2006-04-06′, u’SELL’, u’IBM’, 500, 53.0)
(u’2006-04-05′, u’BUY’, u’MSFT’, 1000, 72.0)

未经允许不得转载:996ICU » Python中使用SQLite

赞 (0) 打赏