python 中使用 SQLite

SQLite是一款轻量级的关系型数据库,相比MySQL等CS模式的数据库,SQLite有以下特点: - 不需要一个单独的服务器进程或操作的系统(无服务器的)。 - SQLite 不需要配置,这意味着不需要安装或管理。 - SQLite 是非常小的,是轻量级的,完全配置时小于400KiB,省略可选功能配置时小于250KiB。 - 一个完整的 SQLite数据库是存储在一个单一的跨平台的磁盘文件。 - SQLite事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。 这里科普一下ACID的定义,摘自维基百科

ACID,是指数据库管理系统(DBMS)在写入/更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。 隔离性:数据库允许多个并发事务同时对齐数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

python中使用SQLite的步骤与使用MySQL的步骤非常类似,主要分为下面三步:

1.获取连接 2.获取游标 3.执行语句并提交事务

下面是操作SQLite的一个简单例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sqlite3

DB = 'test.db'
try:
conn = sqlite3.connect(DB)
cursor = conn.cursor()
cursor.execute('create table student(id varchar(10),name varchar(20))')
cursor.execute('insert into student values("2012","lc")')
cursor.execute('select * from student where name=?',('lc',))
result = cursor.fetchall()
for row in result:
print row
except sqlite3.Error as e:
print e
finally:
cursor.close()
conn.commit()
conn.close()

以下几点将有助于更好地理解上面的代码:

  • 由于SQLite是一个嵌入式的本地数据库,所以连接时不需要指定服务器地址、用户等。只需要通过sqlite3.connect(DB)便可连接数据库DB,假如没有该数据库时会自动创建。
  • 由于SQLite是关系型数据库,所以绝大部分的SQL语句规范与MySQL等类似
  • 如果执行的SQL语句需要从外部传入变量,则需要在SQL语句中将变量替换成,并在execute方法增加第二个参数(tuple类型)
  • fetchall()会返回一个list,list中的每个元素都是一个tuple,代表数据库中的一行记录
  • 执行完语句后需要关闭cursor和conn,并且在关闭conn前需要进行commit(),否则修改不会生效