- 嵌入式设备和物联网。
- 数据分析。
- 将数据从一个系统传输到另一个系统。
- 数据归档和(或)将数据打包到容器中。
- 数据存储在外部或临时数据库中。
- 用于演示或测试目的的公司数据库的替代品。
- 由初学者进行培训,掌握使用数据库的实用技术。
- 原型设计和研究SQL语言的实验性扩展。
您可以在SQLite文档中找到使用此数据库的其他原因。 本文是关于在Python开发中使用SQLite的。因此,对于我们而言,特别重要的是,以模块表示的DBMS包含在该语言的标准库中。也就是说,事实证明,使用Python代码中的SQLite无需安装任何客户端服务器软件,也不需要支持负责使用DBMS的某些服务的操作。收到关系数据库管理系统供您使用后,只需导入模块并开始在程序中使用它就足够了。
sqlite3
sqlite3
模块导入
上面我说过SQLite是Python内置的DBMS。这意味着,要开始使用它,只需先使用诸如这样的命令就可以导入相应的模块,而无需先安装它就足够了
pip install
。SQLite导入命令如下所示:
import sqlite3 as sl
创建与数据库的连接
建立与SQLite数据库的连接,您无需担心安装驱动程序,准备连接字符串以及其他类似事情。您可以创建一个数据库,并可以非常简单,快速地使用一个连接对象:
con = sl.connect('my-test.db')
通过执行这一行代码,我们将创建一个数据库并连接到该数据库。这里的要点是我们要连接的数据库尚不存在,因此系统会自动创建一个新的空数据库。如果已经创建了数据库(假设它
my-test.db
来自上一个示例),则要连接到该数据库,您只需要使用完全相同的代码即可。
新创建的数据库文件
建立表格
现在,让我们在新数据库中创建一个表:
with con:
con.execute("""
CREATE TABLE USER (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
);
""")
这说明了如何向数据库中添加一个
USER
包含三列的表。如您所见,SQLite确实是一个非常简单的数据库管理系统,但是它具有传统关系数据库管理系统所期望的所有基本功能。我们正在谈论对数据类型的支持,包括-允许值的类型,null
对主键和自动增量的支持。
如果此代码按预期运行(但是上述命令未返回任何内容),我们将有一个可供使用的表,准备对其进行进一步的工作。
将记录插入表中
让
USER
我们在刚刚创建的表中插入一些记录。除其他外,这将使我们证明该表确实是由上述命令创建的。
假设我们需要使用一个命令将多个记录添加到表中。在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)
执行此代码后,未收到任何错误消息,这意味着数据已成功添加到表中。
执行数据库查询
现在是时候确定我们刚才运行的命令是否正确运行了。让我们对数据库执行查询,并尝试从表中获取
USER
一些数据。例如-我们获得与年龄不超过22岁的用户相关的记录:
with con:
data = con.execute("SELECT * FROM USER WHERE age <= 22")
for row in data:
print(row)
对数据库执行查询的结果
如您所见,我们设法获得了所需的信息。而且这很容易做到。
另外,即使SQLite是一个简单的DBMS,它也具有广泛的支持。因此,您可以使用大多数SQL客户端使用它。
我正在使用DBeaver。让我们看一下它的外观。
从SQL客户端(DBeaver)连接到SQLite数据库
我正在使用Google Colab云服务,并想将文件下载
my-test.db
到我的计算机上。如果您在计算机上使用SQLite进行实验,则意味着您无需使用某个地方下载数据库文件,就可以使用SQL客户端连接到它。
对于DBeaver,要连接到SQLite数据库,您需要创建一个新的连接并选择SQLite作为数据库类型。
在DBeaver中准备连接
接下来,您需要找到数据库文件。
连接数据库文件
之后,您可以对数据库执行SQL查询。与使用常规关系数据库不同,这里没有什么特别的。
执行数据库查询
与大熊猫融合
您认为这是我们结束有关Python中SQLite支持的讨论的地方吗?不,我们还有很多话要说。即,由于SQLite是标准的Python模块,因此可以轻松地与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
,并将数据写入datafreym 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)
从数据库中读取数据到pandas数据框中
太棒了!现在,让我们写一个新表
USER_SKILL
:
df.to_sql('USER_SKILL', con)
当然,您可以使用SQL客户端使用此表。
使用SQL客户端处理数据库
结果
在Python中肯定会有许多令人惊喜的惊喜,除非您专门寻找它们,否则您可能不会注意到。没人专门隐藏这些功能,但是由于Python中内置了许多功能,因此您根本就不必关注其中的某些功能,或者在从某个地方了解到这些功能之后,就忽略它们。
在这里,我谈到了如何使用内置的Python库
sqlite3
来创建和使用数据库。当然,这样的数据库不仅支持添加数据的操作,而且还支持改变和删除信息的操作。我相信您已经了解了sqlite3
,自己将亲身经历。
非常重要的一点是SQLite非常适合熊猫使用。通过将其放在数据帧中,从数据库中读取数据非常容易。将数据帧的内容保存到数据库的操作同样简单。这使得SQLite更加易于使用。
我邀请所有阅读过本文的人做自己的研究,以寻找有趣的Python功能!
我在本文中演示的代码可以在这里找到。
您是否在Python项目中使用SQLite?