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模块的更多相关文章

  1. python用sqlite3模块操作sqlite数据库-乾颐堂

    SQLite是一个包含在C库中的轻量级数据库.它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard variant)的SQL查询语句来访问数据库. 一些应用可是使用SQLite保存 ...

  2. Python 3.6.0的sqlite3模块无法执行VACUUM语句

    Python 3.6.0的sqlite3模块存在一个bug(见issue 29003),无法执行VACUUM语句. 一执行就出现异常: Traceback (most recent call last ...

  3. 吴裕雄--python学习笔记:sqlite3 模块

    1 sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的 ...

  4. 《Python操作SQLite3数据库》快速上手教程

    为什么使用SQLite数据库? 对于非常简单的应用而言,使用文件作为持久化存储通常就足够了,但是大多数复杂的数据驱动的应用需要全功能的关系型数据库.SQLite的目标则是介于两者之间的中小系统.它有以 ...

  5. Python之sqlite3

    Python sqlite3数据库是一款非常小巧的内置模块,它使用一个文件存储整个数据库,操作十分方便,相比其他大型数据库来说,确实有些差距.但是在性能表现上并不逊色,麻雀虽小,五脏俱全,sqlite ...

  6. python之sqlite3使用详解

    Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它使用一个文件存储整个数据库,操 作十分方便.它的最大优点是使用方便,功能 ...

  7. python之platform模块

    python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...

  8. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  9. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

随机推荐

  1. python3中文件/IO编程

    python3的文件操作可谓是我见过所有语言中最舒服的,那我们来一起看一下py3中的文件操作. 1:文件的打开方式有以下几种: 注:以上图表参考菜鸟教程 2:定位读写文件  f = open(&quo ...

  2. js中变量提升和函数提升

    变量提升和函数提升的总结 我们在学习JavaScript时,会遇到变量提升和函数提升的问题,为了理清这个问题,现做总结如下,希望对初学者能有所帮助 我们都知道 var 声明的变量有变量提升,而 let ...

  3. JAVA,IDEA下的包机制

    IDEA下的包机制 在实际开发中,大型系统往往需要多人合作完成,每个程序员都要命名多个类与接口等类型,难免会定义重复的类与接口.为了避免名字冲突,java提供了包机制只要包名不同,即使类名相同,也能相 ...

  4. 五、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之MVVM中的EventAggregator

    这一篇我们主要再看完示例12.13后,写了个例子,用于再Modules下执行ApplicationCommands,使用IActiveAware执行当前View的Commands,或者Applicat ...

  5. jmeter之json提取器详解

    Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...

  6. Linux文件系统与日志文件

    目录 一.inode和block 1.1.inode和block概述 1.2.inode的内容 inode包含文件的元信息: 查看inode号两种方式 目录文件的结构 1.3.inode的号码 用户通 ...

  7. MySQL-16-主从复制进阶

    延时从库 介绍 延时从库: 是我们人为配置的一种特殊从库,人为配置从库和主库延时N小时 为什么要有延时从库 数据库故障 物理损坏,普通的主从复制非常擅长解决物理损坏 逻辑损坏,普通主从复制没办法解决逻 ...

  8. Prometheus alertmanager邮件发送+grafana告警展示

    前言 前面一篇博客,我已经介绍了prometheus如何监控mysql. 这一篇我来介绍如何通过alertmanger进行告警邮件发送(微信或钉钉类似,因为需要企业帐户,我就不试了),以及如何通过gr ...

  9. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

  10. swagger菜单分级

    效果 实现 SwaggerAutoConfiguration里新增配置: package com.fxkj.common.config; import com.google.common.base.P ...