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. PWA渐进式web应用

    PWA(Progressive Web App)是一种理念,使用多种技术来增强web app的功能,可以让网站的体验变得更好,能够模拟一些原生功能,比如通知推送.在移动端利用标准化框架,让网页应用呈现 ...

  2. etcd学习(5)-etcd的Raft一致性算法原理

    ETCD的Raft一致性算法原理 前言 Raft原理了解 raft选举 raft中的几种状态 任期 leader选举 日志复制 安全性 leader宕机,新的leader未同步前任committed的 ...

  3. 【GCC编译器】将GIMPLE序列划分成基本块(Basic block),并构造控制流图

    1. 首先介绍测试用例,这是一个简单的if-then-else结构,输入为 int 类型的单变量,输出为 int 类型的结果.如果条件 a < 1 成立,则将输入直接返回:如果条件不成立,则返回 ...

  4. 一文彻底搞清 Gradle 依赖【转】

    来源:曾是放牛娃 www.jianshu.com/p/59fd653a54d2 转自:https://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid ...

  5. JUC学习笔记(一)

    1.什么是 JUC 1.1.JUC简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的.JUC 就是 java.util .concurrent 工具包的简称.这是一个处理 ...

  6. js原始数据类型有哪些,引用数据类型有哪些

    js的数据类型划分方式为 原始数据类型和 引用数据类型 栈: 原始数据类型(Undefined,Null,Boolean,Number.String) 堆: 引用数据类型(对象.数组.函数) 两种类型 ...

  7. Map 与 unordered_map 横向与纵向测试,附带原始数据与测试程序

    写程序时,面临用Map还是unordered_map,总是很纠结,于是写了个程序进行测试 Map 与 unordered_map 横向与纵向测试,附带原始数据与测试程序 简单数据(4 Byte) 首先 ...

  8. noip模拟35[第一次4题·裂了]

    noip模拟35 solutions 这是我第一次这么正式的考四个题,因为这四个题都出自同一个出题人,并不是拼盘拼出来的. 但是考得非常的不好,因为题非常难而且一直想睡觉.. 有好多我根本就不会的算法 ...

  9. idea注释

    * * $params$ * @author wangxiaolei * @date $date$ $time$ * @return $return$ */ groovyScript("de ...

  10. 怎样在自己的 Web 中加入强大的日志系统系统?slf4j 的日志插件必须要知道!

    对于程序猿来讲,一个应用程序的日志管理是极为重要的.因为,它可以帮助我们随时查看应用程序的运行状态.执行效果等信息,从而监控软件系统.或是根据日志信息解决一些重要的问题. 但是在 Java 应用程序中 ...