本文转载自公众号《核心阅读》(ID:AI_Discovery)。如果你是一名软件开发人员,相信你一定知道甚至用过一个非常轻量级的数据库——SQLite。它几乎具有作为关系型数据库所需要的所有功能,而这些功能都保存在一个文件中。以下是一些显示SQLite可以使用场景的官方网站:嵌入式设备和IoT数据分析数据传输文件存档和/或数据容器内部或临时数据库在演示或测试期间代表企业数据库教育、培训和测试实验性SQL语言最重要的是,SQLite其实是Python内置的库,换句话说,你不需要安装任何服务端/客户端软件,也不需要把东西作为服务来运行,只要你在Python中导入这个库并启动编码,就会有关系型数据库管理系统!输入和使用当我们说“内置”时,这意味着您甚至不需要运行pipinstall来获取库。只需通过以下方式导入:importsqlite3assl创建到数据库的连接不要为驱动程序、连接字符串等烦恼。我们可以创建一个SQLite数据库并有一个简单的连接对象:con=sl.connect('my-test.db')运行这行代码后,我们创建了数据库并连接到它。我们要求Python自动连接到现有数据库,因此它不是空的。否则,我们可以使用完全相同的代码连接到现有数据库。CREATETABLE然后创建一个表:withcon:con.execute("""CREATETABLEUSER(idINTEGERNOTNULLPRIMARYKEYAUTOINCREMENT,nameTEXT,ageINTEGER);""")向这个用户表添加三列。正如你所看到的,SQLite确实是轻量级的,但它支持所有常规RDBMS应该具备的基本特性,例如数据类型、可空性、主键和自增。运行此代码后,创建了一个表,尽管它没有输出任何内容。插入记录让我们在刚刚创建的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)运行代码后没有任何提示,证明我们成功了。查询表现在,是时候验证所做的一切了。在表中查询示例行。withcon:data=con.execute("SELECT*FROMUSERWHEREage<=22")forrowindata:print(row)另外,SQLite虽然是轻量级的,但是作为一个应用广泛的数据库,大多数SQL客户端软件都支持使用它。我使用最多的是DBeaver。从SQL客户端(DBeaver)连接SQLite数据库因为我使用的是googlecolab,所以需要下载-my-test.db测试数据库文件到本地电脑。在此示例中,如果您在本地计算机上运行Python,则可以使用SQL客户端直接连接到数据库文件。在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']})然后,调用dataframe的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的内置库sqlite3在SQLite数据库中创建和操作表。当然,它也支持更新和删除,大家可以自己试试。最重要的是,我们可以轻松地将SQLite数据库中的表读入Pandas数据帧,反之亦然。这使我们可以更轻松地与轻量级关系数据库进行交互。此外,SQLite没有身份验证,因为一切都需要轻量级。Python中隐藏着许多惊喜。它们不是故意隐藏的,只是Python中有太多开箱即用的功能供人们发现。去探索Python中更多令人惊奇的特性,尽情享受吧!
