当前位置: 首页 > 科技观察

你知道Python有一个内置的数据库吗?Python内置库SQlite3使用指南

时间:2023-03-14 00:57:16 科技观察

如果你是一名软件开发者,相信你一定知道或者用过一个非常轻量级的数据库——SQLite。它几乎具有关系数据库所需的所有功能,但该数据库将所有功能保存在一个文件中。据其官网介绍,SQLite的主要应用场景包括:嵌入式设备和物联网数据分析数据传输文件归档或数据容器内部或临时数据库演示或测试期间替换企业数据库教育、培训和测试实验SQL语言扩展的当然,SQLite还有很多其他的功能,这里就不一一列举了。有兴趣的同学可以去看官方文档:https://www.sqlite.org/whentouse.html最重要的是,SQLite实际上是作为Python内置库使用的。换句话说,你不需要安装任何服务器/客户端软件,或者运行某项服务,只要你在Python中导入库并开始编程,那么你就拥有了一个关系型数据库管理系统!导入和使用这里我们说“内置”意味着您甚至不需要运行pipinstall来获取库。只需通过以下方式导入:importsqlite3assl1。创建到数据库的连接我们根本不需要为驱动程序、连接字符串等操心。你可以直接创建一个SQLite数据库并有一个简单的连接对象:con=sl.connect('my-test.db')运行这行代码后,我们已经创建并连接到数据库。如果Python需要连接的数据库不存在,它会自动为我们创建一个空数据库。如果我们已经创建了数据库,我们可以使用上面完全相同的代码来连接到现有的数据库。2.创建表接下来,我们首先创建一个表。withcon:con.execute("""CREATETABLEUSER(idINTEGERNOTNULLPRIMARYKEYAUTOINCREMENT,nameTEXT,ageINTEGER);""")在这个USER表中,我们添加了三列。正如我们所看到的,SQLite确实是轻量级的,但是它支持了常规RDBMS应该具备的所有基本特性,例如数据类型、可空性、主键和自增。运行此代码后,我们创建了一个表,尽管它没有输出任何内容。3、插入一条记录让我们在刚刚创建的USER表中插入一条数据记录,这也可以证明我们确实创建了它。如果我们需要一次插入多条记录,Python中的SQLite也可以轻松做到这一点。sql='INSERTIINTOUSER(id,name,age)values(?,?,?)'data=[(1,'Alice',21),(2,'Bob',22),(3,'Chris',23)]我们需要使用问号作为占位符来定义SQL语句。下一步是创建一些要插入的示例数据。使用连接对象,可以插入这些示例行。withcon:con.executemany(sql,data)如果运行代码后没有报错就成功了。4.查询表接下来,我们通过实际查询表以获取示例行来验证我们所做的一切。withcon:data=con.execute("SELECT*FROMUSERWHEREage<=22")forrowindata:print(row)可以看到很简单就得到了结果。另外,SQLite虽然是轻量级的,但是作为一个应用广泛的数据库,大多数SQL客户端软件都支持它的使用。我用的最多的是DBeaver,接下来给大家介绍一下。5.从SQL客户端(DBeaver)连接到SQLite数据库由于我使用的是googlecolab,所以我打算将my-test.db文件下载到我的本地计算机上。当然,你也可以直接在电脑上使用Python数据库连接本地数据库。在DBeaver中,创建一个新连接并选择SQLite作为数据库类型。然后,浏览数据库文件。现在您可以在数据库上运行任何SQL查询,看看它与其他常规关系数据库有何不同。与Pandas的无缝连接你以为只有这样?不,事实上,作为Python的内置特性,SQLite可以与Pandas数据框无缝对接。让我们首先定义一个数据框。df_skill=pd.DataFrame({'user_id':[1,1,2,2,3,3,3],'skill':['NetworkSecurity','AlgorithmDevelopment','NetworkSecurity','Java','Python','DataScience','MachineLearning']})然后我们可以简单地调用数据框的to_sql()方法将其保存到数据库中。df_skill.to_sql('SKILL',con)这样我们甚至不需要预先创建表,就会推断出列的数据类型和长度。当然,如果你愿意,你也可以先定义。然后,假设我们想将表USER和SKILL连接在一起,并将结果读入Pandas数据帧。df=pd.read_sql('''SELECTs.user_id,u.name,u.age,s.skillFROMUSERuLEFTJOINSKILLsONu.id=s.user_id''',con)是不是很棒?让我们将结果写入一个在USER_SKILL的新表中调用的文件。df.to_sql('USER_SKILL',con)我们也可以使用SQL客户端来检索表。总结其实Python中隐藏着很多惊喜。而这些惊喜并不是隐藏的,只是Python有太多可以直接使用的特性,导致很多人没有发现这些特性。在本文中,我展示了如何使用Python的内置库sqlite3在SQLite数据库中创建和操作表。它还支持对表进行更新和删除操作。建议您阅读本文后自行尝试。最重要的是,我们可以轻松地将SQLite数据库中的表读入Pandas数据帧,反之亦然。这使我们能够更轻松地与我们的轻量级关系数据库进行交互。您可能会注意到SQLite不进行身份验证,这是由于需要轻量级而设计的行为。让我们探索Python中更多令人惊讶的特性!