若是你是软件开发人员,相信你必定知道或者曾经使用过一个很是轻量级的数据库——SQLite。它具备做为关系数据库所需的几乎全部功能,可是这个数据库把全部功能都保存在一个文件中。在其官方网站上,SQLite的主要应用场景包括:html
固然,SQLite还有不少其余功能,在此不一一列举,感兴趣的同窗能够去看官方文档:https://www.sqlite.org/whentouse.htmlsql
最重要的是,SQLite其实是做为Python库内置的。换言之,你不须要安装任何服务器端/客户端软件,也不须要运行某个服务,只要你在Python中导入库并开始编程,那么你就有了一个关系数据库管理系统!数据库
这里咱们说“内置”的意思就是,你甚至不须要运行 pip install ,就能获取库。只须要经过如下方式导入:编程
import sqlite3 as sl
咱们根本不须要为驱动程序、链接字符串等烦恼。能够直接建立一个 SQLite 数据库,并拥有一个简单的链接对象:服务器
con = sl.connect('my-test.db')
运行此行代码后,咱们就已经建立并链接到该数据库上。 若是要求Python链接的数据库不存在,它就会自动帮咱们建立一个空数据库。 若是咱们已经建立了数据库,就能用上面彻底相同的代码链接到现有数据库。运维
接下来,咱们先建立一个表格。oop
with con: con.execute(""" CREATE TABLE USER ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER ); """)
在这个 USER 表中,咱们添加了三列。正如咱们所看到的,SQLite 确实是轻量级的,可是它支持常规 RDBMS 应该具备的全部基本特性,例如数据类型、可为null、主键和自动递增。测试
运行这段代码以后,咱们就已经建立好了一个表,尽管它什么都没有输出。大数据
让咱们在刚刚建立的 USER 表中插入数据记录,这也能够证实咱们确实建立了它。网站
若是咱们须要一次性插入多个记录,Python中的SQLite也能很容易地实现这一点。
sql = 'INSERT INTO USER (id, name, age) values(?, ?, ?)' data = [ (1, 'Alice', 21), (2, 'Bob', 22), (3, 'Chris', 23) ]
咱们须要用问号做为占位符来定义SQL语句 。接下来就是建立一些要插入的示例数据。使用链接对象,就能插入这些示例行。
with con: con.executemany(sql, data)
在运行代码以后,没有报错,那就是成功的。
接下来,咱们经过实际的方式来验证咱们所作的一切,经过查询表格来获取示例行。
with con: data = con.execute("SELECT * FROM USER WHERE age <= 22") for row in data: print(row)
你能够看到,很简单就获得告终果。
此外,尽管 SQLite 是轻量级的,可是做为一个普遍使用的数据库,大多数SQL客户端软件都支持使用它。
我本身用得最多的是 DBeaver,接下来给你们介绍一下。
由于我用的是 googlecolab,因此我要将 my-test.db 文件下载到个人本地计算机上。固然,你也能够直接在你的电脑上使用 Python 数据库链接你的本地数据库。
在 DBeaver 中,建立一个新链接并选择 SQLite 做为数据库类型。
而后,浏览DB文件。
如今你能够在数据库上运行任何SQL查询,看看它与其余常规关系数据库有什么不一样。
你觉得就只有这些?不,事实上,做为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'] })
而后,咱们能够简单地调用数据帧的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)
是否是很厉害?让咱们把结果写到一个名为USER_SKILL的新表中。
df.to_sql('USER_SKILL', con)
咱们也能够用SQL客户端来检索表。
实际上,Python中还隐藏着不少惊喜。并且这些惊喜并不没有隐藏起来,只是Python有太多现成能够直接使用的特性了,这就致使不少人没法发现这些特性。
在本文中,我介绍了如何使用 Python 内置库 sqlite3 在 SQLite 数据库中建立和操做表。它也支持对表格进行更新和删除操做,建议你们在看完这篇文章以后本身尝试一下。
最重要的是,咱们能够轻松地将表从 SQLite 数据库读入 Pandas 数据帧,反之亦然。这使咱们可以更容易地与咱们的轻量级关系数据库进行交互。
你可能会注意到 SQLite 没有进行身份验证,这也是它刻意设计的行为,由于须要轻量化。
一块儿去探索Python中更多使人惊讶的特性吧!
原文连接:https://developer.51cto.com/art/202007/622645.htm#topx
做者:为AI呐喊
更多文章和资料|点击下方文字直达 ↓↓↓
阿里云K8s实战手册
[阿里云CDN排坑指南]CDN
ECS运维指南
DevOps实践手册
Hadoop大数据实战手册
Knative云原生应用开发指南
OSS 运维实战手册