SQLite数据库的Python接口

SQLite是一个开源数据库,它是无服务器的,不需要配置。整个数据库是一个磁盘文件,可以将其放置在操作系统文件系统中的任何位置。SQLite命令类似于标准SQL。SQLite被诸如浏览器之类的应用程序广泛用于内部数据存储。对于嵌入式设备来说,这也是方便的数据存储。

标准Python库内置了对SQLite数据库连接的支持。它包含sqlite3模块,它是Gerhad Haring编写的DB-API V2兼容模块。它遵循DB-API 2.0。

已根据PEP-249定义了DB-API,以确保用于访问不同数据库产品的Python模块之间的相似性。

数据库处理过程的第一步是获取代表数据库的连接对象。接下来使用连接,获得一个游标对象。游标对象类似于迭代器的概念。它用于处理数据库查询返回的单个行。光标可以看作是指向一组行中的一行的指针。

游标对象有助于执行SQL查询,以对基础数据库执行CRUD操作。

Connect()函数

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类型

根据下表,SQLite数据类型默认映射为等效的Python数据类型

Python类型
SQLite类型
没有
空值
整型
整数
浮动
真实
力量
文本
个字节
BLOB

例外情况

DB-API定义了以下有关SQLite数据库的SQL操作的例外-



数据库错误
 与数据库相关的错误引发异常。
完整性错误
 当数据库的关系完整性受到影响时引发异常,例如,外键检查失败。它是DatabaseError的子类。
编程错误
 因编程错误而引发的异常,例如找不到或已存在表,SQL语句中的语法错误,指定的参数数量错误等。
OperationalError
 对于与数据库的操作有关的错误(不一定在程序员的控制下)引发的异常,
NotSupportedError
 如果使用了数据库不支持的方法或数据库API,则会引发异常。