python操作轻量级数据库sqlite
SQLite简介
SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
功能特性
- ACID事务
- 零配置 – 无需安装和管理配置
- 支持数据库大小至2TB
- 比一些流行的数据库在大部分普通数据库操作要快
- 独立: 没有额外依赖
- 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
数据类型
- Typelessness(无类型)
- 支持常用的数据库类型
python操作SQLite
Python2.5之后,内置了SQLite3,成为了内置模块
import sqlite3
创建/打开数据库
如果数据库不存在就会创建新的数据库
# 可以指定创建数据库的路径,比如可以写成sqlite3.connect(r"E:\DEMO.db")
con = sqlite3.connect("DEMO.db")
也可以创建数据库在内存中
con = sqlite3.connect(":memory:")
数据库连接对象
打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:
- commit()--事务提交
- rollback()--事务回滚
- close()--关闭一个数据库连接
- cursor()--创建一个游标
关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。
创建游标
我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。
cu=con.cursor()
游标对象有以下的操作:
- execute()--执行sql语句
- executemany--执行多条sql语句
- close()--关闭游标
- fetchone()--从结果中取一条记录,并将游标指向下一条记录
- fetchmany()--从结果中取多条记录
- fetchall()--从结果中取出所有记录
- scroll()--游标滚动
CURD操作
创建表
sql = "CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY,name TEXT,age INTEGER)"
cu.execute(sql)
# or
cu.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")
创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL
添加数据
# ①:添加单条数据
data = "1,'Desire',5"
cu.execute('INSERT INTO test VALUES (%s)' % data)
# ②:添加单条数据
cu.execute("INSERT INTO test values(?,?,?)", (6, "zgq", 20))
# ③:添加多条数据
cu.executemany('INSERT INTO test VALUES (?,?,?)', [(3, 'name3', 19), (4, 'name4', 26)])
简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象con来进行提交commit和回滚rollback操作.
con.commit()
更新数据
# 方式一
cu.execute("UPDATE test SET name=? WHERE id=?", ("nihao", 1))
# 方式二
cu.execute("UPDATE test SET name='haha' WHERE id=3")
con.commit()
删除数据
# 方式一
cu.execute("DELETE FROM test WHERE id=?", (1,))
# 方式二
cu.execute("DELETE FROM test WHERE id=3")
con.commit()
id为1、3的数据都被删除了
查询数据
查询所有数据
cu.execute('select * from test')
print(cu.fetchall())
[(1, 'Desire', 5), (3, 'name3', 19), (4, 'name4', 26), (6, 'zgq', 20)]
查询单条数据
cu.execute('select * from test')
print('单条数据:',cu.fetchone())
单条数据: (1, 'Desire', 5)
查询多条数据
cu.execute('select * from test')
print('多条数据:',cu.fetchmany(3))
多条数据: [(1, 'Desire', 5), (3, 'name3', 19), (4, 'name4', 26)]
事务提交、回滚
提交
con.commit()
回滚
con.rollback()
断开会话连接,释放资源
# 关闭游标
cur.close()
# 断开数据库连接
con.close()