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. intouch与PLC之间通讯状态监测和设置

    intouch与PLC进行通讯状态监测中,一般做法需要PLC来实施主动脉冲计数,或者bool变化来实现.本文通过上位机自带参数设置,实现对intouch通讯状态监视,将画面恢复初始状态,并及时弹窗报警 ...

  2. videojs踩过的坑

    1.videojs-contrib-hls 在webpack中不能用,解决方法:window.videojs = videojs:出处 https://github.com/videojs/video ...

  3. 卷积的等变性(equivariant) / 不变性(invariant)

    不变性:输入x发生变换,但是F之后的输出不变 \(F(x)=F [\)transform\((x)]\) 池化:近似不变性,当图像发生微小变化,最大池化的输出不变,还是一个池化范围内的max 等变性: ...

  4. Mac使用Charles抓取ios手机APP中的https请求

    1.配置Http代理 Port为监听端口号,默认为8888,勾选Enable transparent HTTP proxying,接着勾选SOCKS proxy,可以监听Socks请求 2.安装Cha ...

  5. window.location.href下载文件,文件名中文乱码处理

    下载文件方法: window.location.href='http://www.baidu.com/down/downFile.txt?name=资源文件'; 这种情况下载时:文件名资源文件会中文乱 ...

  6. azure删除ns时一直处于terminating状态

    写个脚本 #!/bin/bash NAMESPACE=corekubectl proxy &kubectl get namespace $NAMESPACE -o json |jq '.spe ...

  7. vue 传参动态

    方法一: router/index.js { path: '/src/views/activitiesDetails', name: activitiesDetails, component: act ...

  8. 并发编程——synchronized关键字的使用

    前言 我们一般对共享数据操作的时候,为了达到线程安全我们会使用synchronized关键字去修饰方法或者代码块.那么今天我们就来讲一讲synchronized关键字的使用. 专栏推荐: 并发编程专栏 ...

  9. Linux下使用pure-ftpd建立匿名ftp访问

    by 无若 (一)ubuntu14.04下使用pure-ftpd建立匿名ftp访问 1.安装apt-get install pure-ftpd 2.修改配置nano /etc/pure-ftpd/co ...

  10. Vue-cli4 唤醒摄像头扫描二维码

    <template> <div class="scan"> <div id="bcid"> <div id=" ...