赞
踩
注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
Python标准库系列将分享90个日常常用的内置模块,从介绍、特性和作用、使用方法以及应用场景来介绍标准库的使用,代码示例在最新的Python3.11版本上运行,其他低版本Python可能存在差异。
标准库-内置库(Standard Library):内置库是指Python自带的标准库,包含了大量常用的模块和函数,例如`os`、`sys`、`re`、`math`、`random`等。这些模块和函数可以直接import进来使用,无需下载或安装。
第三方库(Third-party Library):第三方库是指由第三方开发者编写的Python库。这些库可以通过pip或conda等包管理工具进行下载和安装,例如`numpy`、`pandas`、`matplotlib`、`django`等。即需要pip install安装后才能使用的都是第三方库。
在前面的文章《Python基础之开发必备-标准库(内置模块)汇总详细介绍》中介绍过Python有上百个标准库(内置模块),本篇的sqlite3即是常用的模块之一。其他更多的Python3标准库实践资料请关注公众号:CTO Plus查看。
查看标准库清单:https://mp.weixin.qq.com/s/E4HD4_aPWx0Ok3s-Uf28NQ
Python标准库已经自带了一个轻量级的关系型数据库sqlite3模块,无需额外安装任何东西。sqlite作为后端数据库,结合SQL可以搭配Python建Web,或者制作有数据存储需求的工具,如Web框架Django默认的后端数据库使用的就是sqlite。
Python3标准库中的sqlite3是一个用于操作SQLite数据库的模块,它提供了一系列方便的方法和函数,用于在Python程序中创建、访问、修改SQLite数据库。SQLite是一个轻量级、嵌入式的数据库,它的使用非常广泛,特别是在移动开发和嵌入式系统中。sqlite3模块是Python程序员操作SQLite数据库的常用工具之一。
1. 提供了一系列简洁易用的API,使得建立、操作和查询SQLite数据库变得更加容易。
2. 支持使用Python中的数据结构进行数据操作和查询。
3. 可以通过Python创建、读取和修改SQLite数据库。
4. 可以通过Python进行数据的增删改查等操作。
5. 可以在Python中使用SQL语言操作数据库相关操作。
1. 连接数据库
import sqlite3
# 连接数据库
conn = sqlite3.connect('example.db')
2. 创建表格
- from inner_module_def_datastruct import AUTHOR
- import sqlite3
-
- # 连接数据库
- conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- c = conn.cursor()
-
- # 创建表格
- c.execute('''CREATE TABLE IF NOT EXISTS users
- (id INTEGER PRIMARY KEY AUTOINCREMENT,
- name TEXT NOT NULL,
- age INTEGER,
- address TEXT);''')
-
- # 提交更改
- conn.commit()
-
- # 关闭连接
- conn.close()
则会在当前目录下生成一个名为SteveRocket的数据库文件,并创建了users表,如下图所示
3. 插入数据
- from inner_module_def_datastruct import AUTHOR, AGE, WEIXIN_URL
- import sqlite3
-
- # 连接数据库
- conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- c = conn.cursor()
-
- # 插入数据
- c.execute(f"INSERT INTO users (name, age, address) VALUES ('{AUTHOR}', '{AGE}', '{WEIXIN_URL}')")
-
- # 提交更改
- conn.commit()
-
- # 关闭连接
- conn.close()
查看表内容:
4. 查询数据
- from inner_module_def_datastruct import AUTHOR, AGE, WEIXIN_URL
- import sqlite3
-
- # 连接数据库
- conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- c = conn.cursor()
-
- # 查询数据
- c.execute("SELECT * FROM users")
- result = c.fetchall()
- print(result)
-
- # 提交更改
- conn.commit()
-
- # 关闭连接
- conn.close()
-
- 查询输出结果:
- [(1, 'SteveRocket', 25, 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q'), (2, 'SteveRocket', 25, 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q')]
5. 更新数据
- from inner_module_def_datastruct import AUTHOR, AGE, WEIXIN_URL, CSDN_URL
- import sqlite3
-
- # 连接数据库
- conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- c = conn.cursor()
-
- # 查询数据
- c.execute("SELECT * FROM users")
- result = c.fetchall()
- print(result)
-
- # 更新数据
- c.execute("UPDATE users SET age=?,name=?,address=? WHERE id=2", (22, 'Cramer', CSDN_URL))
-
- # 提交更改
- conn.commit()
-
- # 关闭连接
- conn.close()
-
- 输出结果:
- [(1, 'SteveRocket', 25, 'https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q'), (2, 'Cramer', 22, 'https://blog.csdn.net/zhouruifu2015/')]
上面示例将id为2的记录修改了name、age、address。
6. 删除数据
import sqlite3
# 连接数据库
conn = sqlite3.connect('example.db')
# 获取游标
c = conn.cursor()
# 删除数据
c.execute("DELETE FROM users WHERE name=?", ('SteveRocket',))
# 查询数据
c.execute("SELECT * FROM users")
result = c.fetchall()
print(result)
# 提交更改
conn.commit()
# 关闭连接
conn.close()
输出结果:
[(2, 'Cramer', 22, 'https://blog.csdn.net/zhouruifu2015/')]
我们在上面的代码示例中创建了一个简单的关系型数据库,现在在此基础之上以一个书店的书和价格为例。数据库中包含两个表:category用于记录书籍的分类,book用于记录某本书的信息。一本书归属于某一个分类,因此book有一个外键(foreign key),指向catogory表的主键id。
创建数据库表
在使用connect()连接数据库后,我就可以通过定位指针cursor,来执行SQL命令:
- from inner_module_def_datastruct import AUTHOR, AGE, WEIXIN_URL, CSDN_URL
- import sqlite3
- # 连接数据库
- conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- c = conn.cursor()
-
- c.execute('''CREATE TABLE IF NOT EXISTS category
- (id int primary key, sort int, name text)''')
- c.execute('''CREATE TABLE IF NOT EXISTS book
- (id int primary key,
- sort int,
- name text,
- price real,
- category int,
- FOREIGN KEY (category) REFERENCES category(id))''')
-
- conn.commit()
- conn.close()
SQLite的数据库是一个磁盘上的文件,如上面的SteveRocket,因此整个数据库可以方便的移动或复制。SteveRocket一开始不存在,所以SQLite将自动创建一个新文件。上面的建表代码,利用execute()命令,执行了两个SQL命令,创建数据库中的两个表。创建完成后,保存并断开数据库连接。
插入数据
- class BooKManager:
- def __init__(self):
- # 连接数据库
- self.conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- self.c = self.conn.cursor()
-
- def insert_data(self):
- self.c.execute("INSERT INTO category VALUES (1, 1, 'fpga')")
- self.c.execute("INSERT INTO category VALUES (?, ?, ?)", (2, 2, 'python'))
-
- books = [(1, 1, '基于FPGA的数字图像处理原理及应用', 53.12, 1),
- (2, 3, 'Python技术手册(第2版)', 47.5, 2),
- (3, 2, 'Python设计模式第2版', 63.6, 2),
- ]
-
- self.c.executemany('INSERT INTO book VALUES (?, ?, ?, ?, ?)', books)
-
- self.conn.commit()
- self.conn.close()
-
- if __name__ == '__main__':
- bm = BooKManager()
- bm.insert_data()
本示例定义了一个类BooKManager,以及类方法insert_data,在初始化类时连接了数据库,在方法insert_data里面进行了插入数据,同样可以使用execute()来执行完整的SQL语句。SQL语句中的参数,使用"?"作为替代符号,并在后面的参数中给出具体值。这里不能用Python的格式化字符串,如"%s",因为这一用法容易受到SQL注入攻击。
也可以用executemany()的方法来执行多次插入,增加多个记录。每个记录是表中的一个元素,如上面的books表中的元素。
查看表中的数据,如下:
查询
在执行查询语句后,Python将返回一个循环器,包含有查询获得的多个记录。循环读取,也可以使用sqlite3提供的fetchone()和fetchall()方法读取记录:
- class BooKManager:
- def __init__(self):
- # 连接数据库
- self.conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- self.c = self.conn.cursor()
-
- def select_data(self):
- self.c.execute('SELECT sort,name,price FROM book ORDER BY sort')
- print(self.c.fetchone()) # 返回第一条数据:(1, '基于FPGA的数字图像处理原理及应用', 53.12)
- print(self.c.fetchone()) # 返回第二条数据:(2, 'Python设计模式第2版', 63.6)
-
- print(self.c.fetchall()) # 返回所有数据:[(1, '基于FPGA的数字图像处理原理及应用', 53.12), (2, 'Python设计模式第2版', 63.6), (3, 'Python技术手册(第2版)', 47.5)]
-
- print(self.c.fetchmany(2)) # 返回指定条数数据:[(1, '基于FPGA的数字图像处理原理及应用', 53.12), (2, 'Python设计模式第2版', 63.6)]
-
-
- self.c.execute('SELECT * FROM book WHERE book.category=2')
- print(self.c.fetchall())
-
- for row in self.c.execute('SELECT name, price FROM book ORDER BY sort'):
- print(row)
-
- if __name__ == '__main__':
- bm = BooKManager()
- bm.select_data()
更新与删除
可以更新某个记录,或者删除记录:
- class BooKManager:
- def __init__(self):
- # 连接数据库
- self.conn = sqlite3.connect(AUTHOR)
-
- # 获取游标
- self.c = self.conn.cursor()
-
- def update_delete_data(self):
- # 更新id为1的书籍价格为88.88
- self.c.execute('UPDATE book SET price=? WHERE id=?', (88.88, 1))
- # 删除id为2的书籍数据
- self.c.execute('DELETE FROM book WHERE id=2')
-
- self.conn.commit()
- self.conn.close()
-
- # self.c.execute('DROP TABLE book') # 直接删除整张表
'运行
执行update_delete_data方法后表的数据变成如下
如果删除SteveRocket.db,那么整个数据库都会被删除。
1. 客户端数据库存储:使用Python中的sqlite3模块开发客户端数据库存储,存储客户信息、订单信息等。
2. Web应用程序:使用Python中的sqlite3模块作为Web应用程序的持久化数据存储层,存储网站用户数据、日志等信息。
3. 移动应用程序:在移动应用程序中,SQLite作为本地数据库使用非常广泛,可以通过Python中的sqlite3模块快速创建和操作数据库。
总之,sqlite3模块是Python中最常用的数据库模块之一。通过sqlite3模块,Python程序员可以方便地处理SQLite数据库,进行增删改查等常见操作。无论是开发Web应用程序,还是移动应用程序,sqlite3模块都是不可或缺的。sqlite3只是一个SQLite的接口。想要熟练的使用SQLite数据库,还需要学习更多的关系型数据库的知识。
完整的Python3.11标准库代码示例,请关注公众号CTO Plus,在后台回复:py标准库
Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接
更多精彩,关注我公号,一起学习、成长
标准库系列-推荐阅读:
推荐阅读:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。