Python内置库SQlite3使用指南

若是你是软件开发人员,相信你必定知道或者曾经使用过一个很是轻量级的数据库——SQLite。它具备做为关系数据库所需的几乎全部功能,可是这个数据库把全部功能都保存在一个文件中。在其官方网站上,SQLite的主要应用场景包括:html

  • 嵌入式设备和物联网
  • 数据分析
  • 数据传输
  • 文件存档或数据容器
  • 内部或临时数据库
  • 在演示或测试期间替代企业数据库
  • 教育、培训和测试
  • 实验性SQL语言扩展

固然,SQLite还有不少其余功能,在此不一一列举,感兴趣的同窗能够去看官方文档:https://www.sqlite.org/whentouse.htmlsql

最重要的是,SQLite其实是做为Python库内置的。换言之,你不须要安装任何服务器端/客户端软件,也不须要运行某个服务,只要你在Python中导入库并开始编程,那么你就有了一个关系数据库管理系统!数据库

导入和使用

这里咱们说“内置”的意思就是,你甚至不须要运行 pip install ,就能获取库。只须要经过如下方式导入:编程

import sqlite3 as sl

1.建立与数据库的链接

咱们根本不须要为驱动程序、链接字符串等烦恼。能够直接建立一个 SQLite 数据库,并拥有一个简单的链接对象:服务器

con = sl.connect('my-test.db')

运行此行代码后,咱们就已经建立并链接到该数据库上。 若是要求Python链接的数据库不存在,它就会自动帮咱们建立一个空数据库。 若是咱们已经建立了数据库,就能用上面彻底相同的代码链接到现有数据库。运维

2.建立表格

接下来,咱们先建立一个表格。oop

with con: 
    con.execute(""" 
        CREATE TABLE USER ( 
            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
            name TEXT, 
            age INTEGER 
        ); 
    """)

在这个 USER 表中,咱们添加了三列。正如咱们所看到的,SQLite 确实是轻量级的,可是它支持常规 RDBMS 应该具备的全部基本特性,例如数据类型、可为null、主键和自动递增。测试

运行这段代码以后,咱们就已经建立好了一个表,尽管它什么都没有输出。大数据

3.插入记录

让咱们在刚刚建立的 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)

在运行代码以后,没有报错,那就是成功的。

4.查询表格

接下来,咱们经过实际的方式来验证咱们所作的一切,经过查询表格来获取示例行。

with con: 
    data = con.execute("SELECT * FROM USER WHERE age <= 22") 
    for row in data: 
        print(row)

你能够看到,很简单就获得告终果。

此外,尽管 SQLite 是轻量级的,可是做为一个普遍使用的数据库,大多数SQL客户端软件都支持使用它。

我本身用得最多的是 DBeaver,接下来给你们介绍一下。

5.从SQL客户端(DBeaver)链接到SQLite数据库

由于我用的是 googlecolab,因此我要将 my-test.db 文件下载到个人本地计算机上。固然,你也能够直接在你的电脑上使用 Python 数据库链接你的本地数据库。

在 DBeaver 中,建立一个新链接并选择 SQLite 做为数据库类型。

而后,浏览DB文件。

如今你能够在数据库上运行任何SQL查询,看看它与其余常规关系数据库有什么不一样。

与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'] 
})

而后,咱们能够简单地调用数据帧的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 运维实战手册

相关文章
相关标签/搜索