您知道Python具有嵌入式DBMS吗?

如果您是一名程序员,那么我相信您可能知道一个非常紧凑且要求不高的DBMS SQLite的存在,甚至使用过它。该系统几乎具有关系数据库管理系统所期望的所有功能,但是所有内容都存储在一个文件中。以下是该系统官方站点上提到的一些SQLite使用场景



  • 嵌入式设备和物联网。
  • 数据分析。
  • 将数据从一个系统传输到另一个系统。
  • 数据归档和(或)将数据打包到容器中。
  • 数据存储在外部或临时数据库中。
  • 用于演示或测试目的的公司数据库的替代品。
  • 由初学者进行培训,掌握使用数据库的实用技术。
  • 原型设计和研究SQL语言的实验性扩展。


您可以在SQLite文档中找到使用此数据库的其他原因 本文是关于在Python开发中使用SQLite的。因此,对于我们而言,特别重要的是,以模块表示的DBMS包含在该语言的标准库中。也就是说,事实证明,使用Python代码中的SQLite无需安装任何客户端服务器软件,也不需要支持负责使用DBMS的某些服务的操作。收到关系数据库管理系统供您使用后,只需导入模块并开始在程序中使用它就足够了







sqlite3sqlite3



模块导入



上面我说过SQLite是Python内置的DBMS。这意味着,要开始使用它,只需先使用诸如这样的命令就可以导入相应的模块,而无需先安装它就足够了pip installSQLite导入命令如下所示:



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?






All Articles