|隐藏彩蛋:你知道python有一个内置的数据库吗?


全文共2520字 , 预计学习时长7分钟

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图


如果你是软件开发人员 , 相信你一定知道甚至曾经使用过一个非常轻量级的数据库——SQLite 。 它几乎拥有作为一个关系数据库所需的所有功能 , 而且这些有功能都保存在一个文件中 。 下面是一些官方网站显示可以使用SQLite的场景:
· 嵌入式设备和物联网
· 数据分析
· 数据传输
· 文件归档和/或数据容器
· 内部或临时数据库
· 在演示或测试期间代表企业数据库
· 教育、培训和测试
· 实验性SQL语言扩展
最重要的是 , SQLite实际上是作为Python的内置库 , 换言之 , 你不需要安装任何服务器端/客户端软件 , 也不需要让某个东西作为服务运行 , 只要你用Python导入库并开始编码 , 就会有一个关系数据库管理系统!

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

输入与使用
|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图


当我们说“内置”时 , 这意味着你甚至不需要运行pip install来获取库 。 只需通过以下方式导入:
import sqlite3 as sl
创建到数据库的连接
不要为驱动程序、连接字符串等烦恼 。 可以创建一个SQLite数据库 , 并拥有一个简单的连接对象:
con = sl.connect('my-test.db')
运行这行代码之后 , 我们已经创建了数据库并连接到它 。 我们要求Python自动连接现有的数据库 , 因此它不是空的 。 否则 , 我们可以使用完全相同的代码连接到现有数据库 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

创建表
然后创建一个表:
【|隐藏彩蛋:你知道python有一个内置的数据库吗?】
with con: con.execute('''''' CREATE TABLE USER ( id INTEGER NOT NULL PRIMARYKEY AUTOINCREMENT, name TEXT, age INTEGER ); '''''')
在这个用户表中添加三列 。 正如你所看到的 , SQLite确实是轻量级的 , 但是它支持常规RDBMS应该具有的所有基本特性 , 例如数据类型、可为null、主键和自动递增 。 运行这段代码之后就已经创建了一个表 , 尽管它什么也不输出 。
插入记录
让我们在刚刚创建的USER表中插入一些记录 , 这也可以证明我们确实创建了它 。 假设要一次性插入多个条目 。 Python中的SQLite可以轻松实现这一点 。
sql = 'INSERT INTO USER (id, name, age) values(?,?, ?)' data = http://news.hoteastday.com/a/[ (1,'Alice', 21), (2, 'Bob', 22), (3, 'Chris', 23) ]
我们需要用问号作为占位符来定义SQL语句 。 然后 , 创建一些要插入的示例数据 。 通过连接对象 , 插入这些示例行 。
with con: con.executemany(sql, data)
运行代码之后 , 没有任何提示 , 证明我们成功了 。
查询表
现在 , 是时候验证所做的一切了 。 查询表以获取样本行 。
with con: data = http://news.hoteastday.com/a/con.execute(''SELECT *FROM USER WHERE age <= 22'') for row in data: print(row)
|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

另外 , 尽管SQLite是轻量级的 , 但是作为一个广泛使用的数据库 , 大多数SQL客户端软件都支持使用它 。 我使用最多的是DBeaver 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

从SQL客户端(DBeaver)连接到SQLite数据库
因为我用的是googlecolab , 所以要下载- my-test.db测试数据库文件到本地计算机 。 在本例中 , 如果在本地计算机上运行Python , 则可以使用SQL客户机直接连接到数据库文件 。
在DBeaver中 , 创建一个新连接并选择SQLite作为DB type 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

然后 , 浏览到DB文件 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

现在 , 可以在数据库上运行任何SQL查询 。 它与其他常规关系数据库没有什么不同 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

与Pandas无缝融合
事实上 , 作为Python的一个内置特性 , SQLite还可以与Pandas数据帧无缝集成 。
定义一个数据帧:
df_skill = pd.DataFrame({ 'user_id': [1,1,2,2,3,3,3], 'skill': ['Network Security','Algorithm Development', 'Network Security', 'Java', 'Python', 'Data Science','Machine Learning'] })
|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

然后 , 可以简单地调用数据帧的to_sql()方法将其保存到数据库中 。
df_skill.to_sql('SKILL', con)
就这样 , 我们甚至不需要预先创建表 , 列的数据类型和长度都会被推断出来 。 当然 , 如果你想的话 , 仍然可以事先定义它 。
然后 , 假设我们要连接表USER和SKILL , 并将结果读入Pandas数据框 。 它也是无缝的 。
df = pd.read_sql(''' SELECT s.user_id, u.name, u.age,s.skill FROM USER u LEFT JOIN SKILL s ON u.id= s.user_id ''', con)
|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

让我们把结果写到一个名为USER_SKILL的新表中:
df.to_sql('USER_SKILL', con)
然后 , 还可以使用SQL客户机检索表 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

本文介绍了如何使用Python内置库sqlite3在SQLite数据库中创建和操作表 。 当然 , 它也支持更新和删除 , 你可以自己尝试一下 。
最重要的是 , 我们可以轻松地将表从SQLite数据库读入Pandas数据帧 , 反之亦然 。 这使我们能够更容易地与轻量级关系数据库进行交互 。 此外 , SQLite没有身份验证 , 因为一切都需要是轻量级的 。

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

图源:unsplash
Python中隐藏着许多惊喜 。 它们并不是故意藏起来 , 只是因为Python中存在太多现成的特性以至于人们无法发现 。 去探索Python中更多令人惊讶的特性 , 享受它们吧!

|隐藏彩蛋:你知道python有一个内置的数据库吗?
本文插图

留言点赞关注
我们一起分享AI学习与发展的干货
如转载 , 请后台留言 , 遵守转载规范


    推荐阅读