百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

sqlite-utils:用于构建SQLite数据库的Python库和命令行工具

suiw9 2024-10-29 16:42 29 浏览 0 评论

sqlite-utils是我在过去六个月中一直在构建的Python库和命令行工具的合集,旨在尽可能快速简便地创建新的SQLite数据库。

它是我的Datasette项目构建的工具生态系统的一部分。

我花了整个周末为它添加各种令人兴奋的命令行选项,现在已经准备完毕。

一个用于快速创建数据库的python库

Datasette背后的一个核心思想是,SQLite是发布各种有趣的结构化数据的理想格式。DataSette接收任意SQLite数据库,并添加可浏览的Web界面、JSON API以及将表和查询导出为CSV的功能。

这个程序的另一半是创建SQLite数据库的工具。 csvs-to-sqlite是我第一次尝试搭建命令行工具,而sqlite-utils采用更加灵活和全面的方法。

我从去年开始研究sqlite-utils,作为我的项目Analyze US Election Russian Facebook Ads的一部分。 最初的目标是构建一个可以提高在Jupyter notebook中构建新的SQLite数据库效率的工具库。

该库背后的核心思想是,您可以为其提供一个Python字典列表(相当于JSON对象),它将自动创建具有正确模式的SQLite表,然后将这些项插入到新表中。

为了进一步说明,让我们使用这个由NASA发布的陨石坠落数据JSON文件创建一个数据库(通过由Justin Dorfman策划的awesome-json-datasets发现)。

以下是将数据快速存入数据库的代码实现:

这两行代码在磁盘上创建了一个新的sqlite数据库,名为meetites.db,在该文件中创建了一个名为meetites的表,根据输入的数据检测必要的列,插入所有行并将id列设置为主键。

要查看生成的数据库,请运行命令datasette meteorites.db并浏览地址:http://127.0.0.1:8001/。

使用这个工具库还可以做更多的事情。 您可以批量创建表,插入和更新数据,配置外键关系,配置SQLite全文搜索等等。 我您通过查阅文档以获取所有详细信息。

sqlite-utils命令行工具

这是过去几天完成的一个很有趣的新工具。

首先从PyPI安装该工具库,使用该命令 : pip3 install sqlite-utils

让我们先下载一份我在Analyzing US Election Russian Facebook Ads项目中创建的数据库russian-ads.db的副本(4MB):

我们可以使用tables命令查看数据库中的表及其计数列表:

默认情况下,sqlite-utils命令将输出格式化的JSON数据。 您可以使用--csv选项获取CSV:

或者,如果您想要一个漂亮的ASCII艺术表,请使用--table(或快捷方式-t):

表格视图是建立在tabulate之上的,它提供了几十种表格变化。运行sqlite utils tables--help命令以获取完整的列表,运行try--table-fmt=rst获取可以直接粘贴到reStructuredText文本中的输出(用于编写文档)。

到目前为止,我们只看了一个表格列表。 让我们运行一个SQL查询:

同样,这里可以使用--csv输出为CSV,或者使用--table输出为表格。

默认的JSON输出是包装在数组中的对象。 使用--arrays来获取数组。 更有趣的是: --nl会以带换行符分隔的JSON格式输出,如下所示:

对于传输到其他工具来说,这是一种非常有趣的格式。

在命令行上通过JSON创建数据库

sqlite-utils insert命令可用于通过将JSON或CSV直接传输到工具中来创建新表。 它和我之前演示的Python函数中的.insert_all是相同的。

以下是如何直接从命令行创建陨石相关数据库:

这将使用名为meteorites.db的SQLite数据库文件(如果它尚不存在则创建一个),创建或使用名为meteorites的表并从中的标准输入(通过管道)读取数据。 您可以使用文件名替换 "-" 来从磁盘上的文件中读取数据。

insert命令可接受多种格式,默认情况下它会接受JSON数组对象,但是可以使用--nl接受换行分隔的JSON格式的数据,使用--csv接受csv格式的数据。

这意味着您可以组合这些工具!让我们通过从旧数据库中导出数据来创建一个全新的数据库,使用换行分隔的JSON作为中间格式:

这将创建一个名为veterans.db的新文件,其中包含一个广告表,其中只包含在正文中某处提到退伍军人的广告。

由于我们使用的是JSON,所以我们可以在组合中引入其他命令行工具。

jq是一个简洁的小工具,可以使用它自己的小众语言从JSON文件中提取数据。

诺贝尔奖API提供了一个JSON文件,其列出了所有诺贝尔奖获得者,但它们作为一个数组包含在一个最外层的“获奖者”键中。sqlite utils需要一个一维数组,因此我们可以使用jq来获取:

现在我们成功获得一个名为nobel.db的文件,其中包含所有的诺贝尔奖获得者。

最近Datasette增强了导出换行分隔的JSON的能力,因此我们还可以使用此功能直接从数据集使用数据。让我们来看看鲍勃罗斯所作的《绘画的乐趣》中有海滩的每一集:

更多功能

与Python API一样,sqlite-utils命令行工具还有许多其他选项和大量的文档。

我非常喜欢围绕数据集建立一个工具生态系统。sqlite utils是这里的重点:它是我正在构建的其他工具的基础,例如db-to-sqlite(它可以将任何sqlAlchemy支持的数据库直接导出到磁盘上的sqlite文件)。

我发现自己越来越倾向于使用sqlite作为进行各种临时分析的首选,我也很高兴尝试使用sqlite-utils的这些新命令行能力来进行真实的数据搜索任务。

发布于2019年2月25日 上午3:29 在Twitter上关注@simonw

英文原文:https://simonwillison.net/2019/Feb/25/sqlite-utils/
译者:黄叶飞舞

相关推荐

5款Syslog集中系统日志常用工具对比推荐

一、为何要集中管理Syslog?Syslog由Linux/Unix系统及其他网络设备生成,广泛分布于整个网络。因其包含关键信息,可用于识别网络中的恶意活动,所以必须对其进行持续监控。将Sys...

跨平台、多数据库支持的开源数据库管理工具——DBeaver

简介今天给大家推荐一个开源的数据库管理工具——DBeaver。它支持多种数据库系统,包括Mysql、Oracle、PostgreSQL、SLQLite、SQLServer等。DBeaver的界面友好...

强烈推荐!数据库管理工具:Navicat Premium 16.3.2 (64位)

NavicatPremium,一款集数据迁移、数据库管理、SQL/查询编辑、智能设计、高效协作于一体的全能数据库开发工具。无论你是MySQL、MariaDB、MongoDB、SQLServer、O...

3 年 Java 程序员还玩不转 MongoDB,网友:失望

一、什么场景使用MongoDB?...

拯救MongoDB管理员的GUI工具大赏:从菜鸟到极客的生存指南

作为一名在NoSQL丛林中披荆斩棘的数据猎人,没有比GUI工具更称手的瑞士军刀了。本文将带你围观五款主流MongoDB管理神器的特性与暗坑,附赠精准到扎心的吐槽指南一、MongoDBCompass:...

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

前言最近在做neo4j相关的同步处理,因为产线的可视化工具短暂不可用,发现写起来各种脚本非常麻烦。...

solidworks使用心得,纯干货!建议大家收藏

SolidWorks常见问题...

统一规约-关乎数字化的真正实现(规范统一性)

尽管数字化转型的浪潮如此深入人心,但是,对于OPCUA和TSN的了解却又甚少,这难免让人质疑其可实现性,因为,如果缺乏统一的语义互操作规范,以及更为具有广泛适用的网络与通信,则数字化实际上几乎难以具...

Elasticsearch节点角色配置详解(Node)

本篇文章将介绍如下内容:节点角色简介...

产前母婴用品分享 篇一:我的母婴购物清单及单品推荐

作者:DaisyH8746在张大妈上已经混迹很久了,有事没事看看“什么值得买”已渐渐成了一种生活习惯,然而却从来没有想过自己要写篇文章发布上来,直到由于我产前功课做得“太过认真”(认真到都有点过了,...

比任何人都光彩照人的假期!水润、紧致的肌肤护理程序

图片来源:谜尚愉快的假期临近了。身心振奋的休假季节。但是不能因为这种心情而失去珍贵的东西,那就是皮肤健康。炙热的阳光和强烈的紫外线是使我们皮肤老化的主犯。因此,如果怀着快乐的心情对皮肤置之不理,就会使...

Arm发布Armv9边缘AI计算平台,支持运行超10亿参数端侧AI模型

中关村在线2月27日消息,Arm正式发布Armv9边缘人工智能(AI)计算平台。据悉,该平台以全新的ArmCortex-A320CPU和领先的边缘AI加速器ArmEthos-U85NPU为核心...

柔性——面向大规模定制生产的数字化实现的基本特征

大规模定制生产模式的核心是柔性,尤其是体现在其对定制的要求方面。既然是定制,并且是大规模的定制,对于制造系统的柔性以及借助于数字化手段实现的柔性,就提出了更高的要求。面向大规模定制生产的数字化业务管控...

创建PLC内部标准——企业前进的道路

作者:FrankBurger...

标准化编程之 ----------- 西门子LPMLV30测试总结

PackML乃是由OMAC开发且被ISA所采用的自动化标准TR88.00.02,能够更为便捷地传输与检索一致的机器数据。PackML的主要宗旨在于于整个工厂车间倡导通用的“外观和感觉”,...

取消回复欢迎 发表评论: