Sqlite3概述
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
连接数据库
下面的 Python 代码显示了如何连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
实例
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print ("数据库打开成功")
在这里,您也可以把数据库名称复制为特定的名称 :memory:,这样就会在 RAM 中创建一个数据库。现在,让我们来运行上面的程序,在当前目录中创建我们的数据库 test.db。您可以根据需要改变路径。保存上面代码到 sqlite.py 文件中,并按如下所示执行。如果数据库成功创建,那么会显示下面所示的消息:
$chmod +x sqlite.py $./sqlite.py Open database successfully
创建表
下面的 Python 代码段将用于在先前创建的数据库中创建一个表:
实例
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print ("数据库打开成功")
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print ("数据表创建成功")
conn.commit()
conn.close()
上述程序执行时,它会在 test.db 中创建 COMPANY 表,并显示下面所示的消息:
数据库打开成功 数据表创建成功
INSERT 操作
下面的 Python 程序显示了如何在上面创建的 COMPANY 表中创建记录:
实例
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print ("数据库打开成功")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )")
c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )")
conn.commit()
print ("数据插入成功")
conn.close()
上述程序执行时,它会在 COMPANY 表中创建给定记录,并会显示以下两行:
数据库打开成功 数据插入成功
SELECT 操作
下面的 Python 程序显示了如何从前面创建的 COMPANY 表中获取并显示记录:
#!/usr/bin/python
实例
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print ("数据库打开成功")
cursor = c.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print ("数据操作成功")
conn.close()
上述程序执行时,它会产生以下结果:
数据库打开成功 ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 数据操作成功
UPDATE 操作
下面的 Python 代码显示了如何使用 UPDATE 语句来更新任何记录,然后从 COMPANY 表中获取并显示更新的记录:
实例
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print ("数据库打开成功")
c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit()
print "Total number of rows updated :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print ("数据操作成功")
conn.close()
上述程序执行时,它会产生以下结果:
数据库打开成功 Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 数据操作成功
DELETE 操作
下面的 Python 代码显示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的记录:
实例
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
c = conn.cursor()
print ("数据库打开成功")
c.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print ("数据操作成功")
conn.close()
上述程序执行时,它会产生以下结果:
数据库打开成功 Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 数据操作成功
Sqlite3实现
# 导入sqlite3模块
import sqlite3
# 创建链接对象
# 打开一个到 SQLite 数据库文件 db.sqlite3 的链接
# 如果该数据库不存在则会自动创建,可以指定带有文件路径的文件名
conn = sqlite3.connect('db.sqlite3')
获取游标对象
# 获取游标对象用来操作数据库
cursor = conn.cursor()
执行操作(简单示例)
* 创建表
```
cursor.execute('''create table user(id integer primary key autoincrement,name varchar(20) not null)''')
```
* 插入记录
```
# 插入一条id=1 name='xiaoqiang'的记录
cursor.execute('''insert into user(id,name) values(1,'xiaoqiang')''')
```
* 查找记录
```
# 查找user表中id=1的记录
cursor.execute('''select * from user where id=1''')
# 获得结果
values = cursor.fetchall()
values
[(u'1', u'Michael')]
```
* 删除记录
```
# 删除id=1的记录
sursor.excute('''delete from user where id=1''')
```
* 修改记录
```
# 修改id=1记录中的name为xiaoming
sursor.excute('''update user set name='xiaoming' where id=1''')
```
#提交并关闭数据库连接
# 修改id=1记录中的name为xiaoming
sursor.excute('''update user set name='xiaoming' where id=1''')
# 提交事务
conn.commit()
# 关闭链接
conn.close()