共计 3714 个字符,预计需要花费 10 分钟才能阅读完成。
python 中怎么使用 sqlite3 数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Python SQLITE 数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便。它的最大优点是使用方便,功能相比于其它大型数据库来说,确实有些差距。但是性能表现上,SQLITE 并不逊色。麻雀虽小,五脏俱全,sqlite 实现了多数 sql-92 的标准,比如说 transaction、trigger 和复杂的查询等。
python 的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步(假设数据库模块名为 db):
1. 用 db.connect 创建数据库连接,假设连接对象为 conn
2. 如果该数据库操作不需要返回结果,就直接用 conn.execute 查询,根据数据库事务隔离级别的不同,可能修改数据库需要 conn.commit
3. 如果需要返回查询结果则用 conn.cursor 创建游标对象 cur, 通过 cur.execute 查询数据库,用 cur.fetchall/cur.fetchone/cur.fetchmany 返回查询结果。根据数据库事 务隔离级别的不同,可能修改数据库需要 conn.commit
4. 关闭 cur, conn
下面让我们一步步走进 Python 中的 SQLite 吧。
一,Python SQLITE 数据库导入模块:
import sqlite3
二,创建数据库 / 打开数据库:
cx = sqlite3.connect(E:/test.db) 其实我们不需要显式的创建一个 sqlite 数据库,在调用 connect 函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。这一点应用很好理解。
三,数据库连接对象:
打开数据库时返回的对象 cx 就是一个数据库连接对象,它可以有以下操作:
commit()– 事务提交 rollback()– 事务回滚 close()– 关闭一个数据库连接 cursor()– 创建一个游标
四,Python SQLITE 数据库游标的使用:
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条 SQL 选择语句相关联。因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用
C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。
我们知道关系数据库管理系统实质是面向集合的,在 Sqlite 中并没有一种描述表中单一记录的表达形式,除非使用 where 子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句 select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
下面着重阐述 cursor 游标的使用。其实,所有 sql 语句的执行都要在游标对象下进行。
首先,定义一个游标:
cu = cx.cursor() 这样定义了一个游标。游标对象有以下的操作:
execute()– 执行 sql 语句 executemany– 执行多条 sql 语句 close()– 关闭游标 fetchone()– 从结果中取一条记录,并将游标指向下一条记录 fetchmany()– 从结果中取多条记录 fetchall()– 从结果中取出所有记录 scroll()– 游标滚动 下面就使用 Python SQLITE 数据库中游标对我们上面建立的数据库作一些操作吧:
1, 建表:
cu.execute(create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE)) 上面语句创建了一个叫 catalog 的表,它有一个主键 id,一个 pid,和一个 name,name 是不可以重复的。
2, 插入数据:
cu.execute(insert into catalog values(0, 0, name1) ) cu.execute(insert into catalog values(1, 0, hello) ) 简单的插入两行数据, 不过需要提醒的是, 只有提交了之后, 才能生效. 我们使用数据库连接对象 cx 来进行提交 commit 和回滚 rollback 操作.
cx.commit()
3, 查询:
cu.execute(select * from catalog) 要提取查询到的数据, 使用游标的 fetch*** 函数, 如:
print cu.fetchall() 返回结果如下:
[(0, 0, u name1), (1, 0, u hello)] 如果我们使用 cu.fetchone(), 则首先返回列表中的第一项, 再次使用, 则返回第二项, 依次下去.
4, 修改:
cu.execute(update catalog set name= name2 where id = 0)
cx.commit() 注意, 修改数据以后提交
5, 删除:
cu.execute(delete from catalog where id = 1) cx.commit() 以上简单的操作反应的 Python SQLITE 数据库操作的基本要点, 这里点到为止. 然后,SQLite 的强大, 并不仅限于此, 其对 SQL 高级特性的支持及其小巧灵活的特点, 使得 SQLite 在众多领域受到开发者的青睐.
举例:
Exemplary exemplar 1
import sqlite3
con = sqlite3.connect(d:/mydatabase.db3)
cur = con.cursor()
cur.execute(CREATE TABLE foo (o_id INTEGER PRIMARY KEY, fruit VARCHAR(20), veges VARCHAR(30)) )
con.commit()
cur.execute(INSERT INTO foo (o_id, fruit, veges) VALUES(NULL, apple , broccoli) )
con.commit()
print cur.lastrowid
cur.execute(SELECT * FROM foo)
print cur.fetchall()
Exemplary exemplar 2
#-*- encoding:gb2312 -*-
import sqlite3
conn = sqlite3.connect(D:/aaa.db)
conn.isolation_level = None #这个就是事务隔离级别,默认是需要自己 commit 才能修改数据库,置为 None 则自动每次修改都提交, 否则为
# 下面就是创建一个表
conn.execute(create table if not exists t1(id integer primary key autoincrement, name varchar(128), info varchar(128)) )
# 插入数据
conn.execute(insert into t1(name,info) values (zhaowei , only a test) )
# 如果隔离级别不是自动提交就需要手动执行 commit
conn.commit()
# 获取到游标对象
cur = conn.cursor()
# 用游标来查询就可以获取到结果
cur.execute(select * from t1)
# 获取所有结果
res = cur.fetchall()
print row: , cur.rowcount
# cur.description 是对这个表结构的描述
print desc , cur.description
# 用 fetchall 返回的结果是一个二维的列表
for line in res:
for f in line:
print f,
print
print – *60
cur.execute(select * from t1)
# 这次查询后只取一个结果,就是一维列表
res = cur.fetchone()
print row: , cur.rowcount
for f in res:
print f,
print
# 再取一行
res = cur.fetchone()
print row: , cur.rowcount
for f in res:
print f,
print
print – *60
cur.close()
conn.close()
看完上述内容,你们掌握 python 中怎么使用 sqlite3 数据库的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!