Python之sqlite3模块
python自带有sqlite3模块,该模块可以方便我们操作sqlite数据库,下面一起跟随示例了解sqlite3模块的具体用法。
import sqlite3 # 连接数据库
connection = sqlite3.connect('demo.db')
# 创建游标
cursor = connection.cursor()
# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS CLASS(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL
)''')
# Insert操作
cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (1, 'Paul', 7)")
cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (2, 'Allen', 8)")
cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (3, 'Teddy', 7)")
cursor.execute("INSERT INTO CLASS (ID,NAME,AGE) VALUES (4, 'Mark', 9)")
# 提交当前事务
connection.commit()
# Select操作
cursor.execute("SELECT ID,NAME,AGE from CLASS")
print("fetchone:", cursor.fetchone())
print("fetchmany:", cursor.fetchmany(2))
print("fetchall:", cursor.fetchall())
# 关闭数据库连接
connection.close()
运行结果:
fetchone: (1, 'Paul', 7)
fetchmany: [(2, 'Allen', 8), (3, 'Teddy', 7)]
fetchall: [(4, 'Mark', 9)]
通过sqlite3.connect()连接了数据库,再通过connection.cursor()函数创建了游标,cursor.execute()函数执行创建表的sql语句,再往表中插入4行数据并调用connection.commit()函数提交。提交完成后执行查询的sql语句,分别调用cursor.fetchone()、cursor.fetchmany()、cursor.fetchall()来获取查询结果集,顾名思义,fetchone()是获取一行数据、fetchmany(N)是获取N行数据,fetchall是获取剩下所有行数据。值得一提的是,例子中所有用到cursor的地方,其实都可以直接用connection替换,比如cursor.execute()可以被替换成connection.execute(),其实本质上还是调用cursor对象。
上面例子介绍了sqlite3模块的一些基本用法,下面来看一些其他用法。
import sqlite3
connection = sqlite3.connect('demo.db')
cursor = connection.cursor()
# 重复执行一个sql语句
cursor.executemany("INSERT INTO CLASS (ID,NAME,AGE) VALUES (?, ?, ?)", [(5, 'Bob', 6), (6, 'Alice', 6), (7, 'Tom', 9)])
# 查询自数据库连接打开以来被修改、插入或删除的数据库总行数
print("total_changes:", connection.total_changes)
cursor.execute("SELECT ID,NAME,AGE from CLASS")
# 打印插入数据后的结果
print(cursor.fetchall())
# 回滚
connection.rollback()
cursor.execute("SELECT ID,NAME,AGE from CLASS")
# 打印回滚后的结果
print("rollback:", cursor.fetchall())
connection.commit()
connection.close()
运行结果:
total_changes: 3
[(1, 'Paul', 7), (2, 'Allen', 8), (3, 'Teddy', 7), (4, 'Mark', 9), (5, 'Bob', 6), (6, 'Alice', 6), (7, 'Tom', 9)]
rollback: [(1, 'Paul', 7), (2, 'Allen', 8), (3, 'Teddy', 7), (4, 'Mark', 9)]
此例中新出现了connection.total_changes、connection.executemany()、connection.rollback(),它们分别用于统计被修改的行数、多次执行同一条sql语句、回滚操作。
如果我们想一次性执行多条sql语句,该怎么操作呢?这里可以使用cursor.executescript()函数执行一段sql语句。
import sqlite3
connection = sqlite3.connect('demo.db')
cursor = connection.cursor()
# 执行多个sql语句
cursor.executescript("""
DELETE from CLASS where ID=1;
UPDATE CLASS set AGE = 9 where ID=2;
""")
connection.commit()
cursor.execute("SELECT ID,NAME,AGE from CLASS")
print(cursor.fetchall())
connection.close()
运行结果:
[(2, 'Allen', 9), (3, 'Teddy', 7), (4, 'Mark', 9)]
参考资料
- https://www.runoob.com/sqlite/sqlite-python.html
Python之sqlite3模块的更多相关文章
- python用sqlite3模块操作sqlite数据库-乾颐堂
SQLite是一个包含在C库中的轻量级数据库.它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库. 一些应用可是使用SQLite保存 ...
- Python 3.6.0的sqlite3模块无法执行VACUUM语句
Python 3.6.0的sqlite3模块存在一个bug(见issue 29003),无法执行VACUUM语句. 一执行就出现异常: Traceback (most recent call last ...
- 吴裕雄--python学习笔记:sqlite3 模块
1 sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的 ...
- 《Python操作SQLite3数据库》快速上手教程
为什么使用SQLite数据库? 对于非常简单的应用而言,使用文件作为持久化存储通常就足够了,但是大多数复杂的数据驱动的应用需要全功能的关系型数据库.SQLite的目标则是介于两者之间的中小系统.它有以 ...
- Python之sqlite3
Python sqlite3数据库是一款非常小巧的内置模块,它使用一个文件存储整个数据库,操作十分方便,相比其他大型数据库来说,确实有些差距.但是在性能表现上并不逊色,麻雀虽小,五脏俱全,sqlite ...
- python之sqlite3使用详解
Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它使用一个文件存储整个数据库,操 作十分方便.它的最大优点是使用方便,功能 ...
- python之platform模块
python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...
- python之OS模块详解
python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
随机推荐
- 【阅读笔记】Java核心技术卷一 #2.Chapter4
4 对象和类 4.1 面向对象程序设计概述(略) 4.2 使用预定义类 java.time.LocalDate static LocalDate now(); static LocalDate of( ...
- solr(CVE-2019-17558)远程命令执行
影响版本 Apache Solr 5.x到8.2.0版本 测试 https://github.com/jas502n/CVE-2019-0193
- CentOS 7 安装虚拟机
1.本次安装centos7 安装使用的软件是VitrualBox 虚拟机软件 Oracle公司的虚拟机软件,免费商品(大家可以百度搜索去官网下载) 1:我这里使用的是阿里的centos7的镜像(大家可 ...
- CF427B
没人用ST表么?他比线段树快. 考虑先把ST表跑下来,然后循环一遍区间的起点,看一下这个区间的最大值,和 \(t\) 比较一下即可. 然后这题就做完了.ST表裸题. int f[2000010][21 ...
- DVWA靶场练习-暴力破解
一.暴力破解 (Brute Force) 暴力破解是Web安全领域的一个基础技能,破解方法论为:构建常见用户名及弱口令 因此需要好的字典,对应破解场景构建特定的用户名密码,以及还需要具有灵活编写 ...
- 还有更惨的吗?字节面经,美团,网易,招银,360全部在HR前一面挂了
最近一朋友向我吐槽去年的秋招,字节面经,美团,网易,招银,360全部在HR前一面挂了,实在是有点惨.我把他语无伦次的话做了一个整理: 最近真的很暴躁,控制不住自己陷入情绪低落胡思乱想,每天都是在希望失 ...
- 手工设置Eclipse文本编辑器的配色
Eclipse中不同的文件都有自己专门的编辑器配色设置,下面分别说明. 文本编辑器的背景色: Window->Preferences-> General->Editors->T ...
- shell——sort、uniq、tr、cut和eval命令
一.排序命令sort 以行位单位对文件内容进行排序,也可以根据不同的数据类型进行排序 格式:sort [选项] 参数 格式:cat file | sort 选项 1.2常用选项 选项说明 -f 忽略大 ...
- Tomcat进程意外退出的问题分析
http://ifeve.com/why-kill-2-cannot-stop-tomcat/?tdsourcetag=s_pctim_aiomsg tail后关掉客户端 正常执行shutdown.s ...
- Golang语言系列-06-map数据类型和指针
Map数据类型和指针 Map数据类型 Map基本概念 package main import "fmt" // map // make()函数和new()函数的区别 // make ...