SQLite是一个开源数据库,它是无服务器的,不需要配置。整个数据库是一个磁盘文件,可以将其放置在操作系统文件系统中的任何位置。SQLite命令类似于标准SQL。SQLite被诸如浏览器之类的应用程序广泛用于内部数据存储。对于嵌入式设备来说,这也是方便的数据存储。
标准Python库内置了对SQLite数据库连接的支持。它包含sqlite3模块,它是Gerhad Haring编写的DB-API V2兼容模块。它遵循DB-API 2.0。
已根据PEP-249定义了DB-API,以确保用于访问不同数据库产品的Python模块之间的相似性。
数据库处理过程的第一步是获取代表数据库的连接对象。接下来使用连接,获得一个游标对象。游标对象类似于迭代器的概念。它用于处理数据库查询返回的单个行。光标可以看作是指向一组行中的一行的指针。
游标对象有助于执行SQL查询,以对基础数据库执行CRUD操作。
sqlite3模块中的此函数返回表示磁盘上现有数据库的连接对象,或者如果尚不存在则打开一个新数据库。
import sqlite3 conn=sqlite3.connect('mydb.sqlite3')
SQLite支持创建内存数据库。为此,请使用特殊名称“:memory:”
conn=sqlite3.connect(':memory:')
Connection类中定义了以下方法
cursor()此方法返回光标对象。
cur=conn.cursor()
commit() -此方法将事务永久提交到磁盘。
rollback() -此方法回滚事务以恢复数据库状态到最后一次调用commit()
。如果SQL事务中出现异常,此方法可确保数据一致性。
try: conn.commit() except: conn.rollback()
execute() -隐式创建游标并调用其execute()
方法
executemany() -此方法隐式创建游标并调用其executemany()
方法
create_function() -此方法创建一个用户定义的函数,以后可以在SQL语句中使用该函数。
create_aggregate() -此方法创建一个聚合函数。
iterdump() -此方法创建SQL文本格式的数据库转储。
import sqlite3 con = sqlite3.connect('mydb.sqlite3') f = dump.sql', 'w') for line in con.iterdump(): f.write('%s\n' % line)
backup() -即使访问该方法,该方法也会创建SQLite数据库的备份。
source = sqlite3.connect('mydb.sqlite3') dest = sqlite3.connect(':memory:') source.backup(dest)
从连接对象获得的游标有助于使用execute()
方法对数据库执行各种SQL操作。例如,以下语句在当前数据库中创建一个表
cur = conn.cursor() cur.execute("CREATE TABLE guests ( ID INTEGER PRIMARY KEY, name TEXT (20) NOT NULL, address TEXT (40), city TEXT (20) );"
以下在表中插入一条记录
cur.execute('''INSERT INTO GUESTS VALUES(1,'RAJU','ABIDS', 'HYDERABAD');''')
使用executemany()
方法执行批量添加操作
addreses=[(2,'KISHAN', 'TILAK ROAD', 'PUNE'), (3, 'LATA', 'GAANDHI NAGAR', 'AURANGABAD')] sql='INSERT INTO GUESTS VALUES (:ID, :NAME, :ADD, :CITY)' cur.executemany(sql, addreses)
SELECT查询形成一个结果集,其中包含作为对查询的响应而返回的所有记录。该execute()
方法使用表示SELECT查询语句的字符串。DB-API中有两种方法来检索游标中代表结果集的行。
fetchone() -以元组的形式从结果集中获取下一个可用记录,该元组由获取的记录的每一列的值组成。
fetchall() -以元组列表的形式获取所有剩余的记录。每个元组对应于一行,并包含表中每一列的值。
以下代码使用fetchone()
方法列出来宾表中的所有记录
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) while True: record=cur.fetchone() if record==None: break print (record)
fetchall()
通过以下陈述来说明方法的使用
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) set = cur.fetchall() for record in set: print (record)
根据下表,SQLite数据类型默认映射为等效的Python数据类型
Python类型 | SQLite类型 |
---|---|
没有 | 空值 |
整型 | 整数 |
浮动 | 真实 |
力量 | 文本 |
个字节 | BLOB |
DB-API定义了以下有关SQLite数据库的SQL操作的例外-
数据库错误 | 与数据库相关的错误引发异常。 |
完整性错误 | 当数据库的关系完整性受到影响时引发异常,例如,外键检查失败。它是DatabaseError的子类。 |
编程错误 | 因编程错误而引发的异常,例如找不到或已存在表,SQL语句中的语法错误,指定的参数数量错误等。 |
OperationalError | 对于与数据库的操作有关的错误(不一定在程序员的控制下)引发的异常, |
NotSupportedError | 如果使用了数据库不支持的方法或数据库API,则会引发异常。 |