隐藏彩蛋:你知道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有一个内置的数据库吗?文章插图
创建表
然后创建一个表:
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://kandian.youth.cn/index/[(1,'Alice', 21),(2, 'Bob', 22),(3, 'Chris', 23)]我们需要用问号作为占位符来定义SQL语句 。 然后 , 创建一些要插入的示例数据 。 通过连接对象 , 插入这些示例行 。
with con:con.executemany(sql, data)运行代码之后 , 没有任何提示 , 证明我们成功了 。
查询表
现在 , 是时候验证所做的一切了 。 查询表以获取样本行 。
with con:data = http://kandian.youth.cn/index/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有一个内置的数据库吗?文章插图