将半结构化数据(例如json文档)以最小的工作量推送到数据库中。包括验证和架构迁移。

sqlnosql的Python项目详细描述


sqlnosql让您从nosql转到,嗯……sql。它需要一个JSON schema并将其转换为以下任一项:

  • SQL模式
  • sqlalchemy表对象
  • alembic/sqlalchemy的迁移文件

它还可以获取json数据并将其插入到数据库中—或者 从命令行或python。

在命令行上键入sqlnosql --help以获取详细信息。

sqlnosql将把json类型转换为sql类型,它将 扁平化嵌套的数据结构,以便 {"supplies": {"medical": "string"}}变成supplies_medical 带文本类型的列。

sqlnosql在etl过程中非常有用 要进入平面文件或nosql数据库的数据 用于分析的正确SQL数据库。

如果数据库支持它,sqlnosql将保持数组的完整性。在 尤其是postgres有一个数组类型。但是,请记住 本机数组只能包含单个简单类型,如字符串或 数字。复杂类型将自动减少为简单类型 sqlnosql。默认情况下,只需将它们序列化为json即可。

类似地,如果json模式指定的对象没有任何 特别定义的属性,这些属性也将序列化为 串。

请记住,json模式必须是详尽无遗的。字段不在 架构不会变成列,将被忽略。

因为你可能不需要它,没有数据支持 规范化,也就是说,不支持将数据拆分为 通过外键连接的单独表。

使用alembic进行迁移

亚历姆比奇一开始可能看起来势不可挡,特别是对于那些 不是来自python背景,而是希望使用迁移 sqlnosql的功能。别担心,很容易弄到 起动。

找出您希望将迁移代码保存在何处,可能是 一般代码repo的子目录,以及 alembic init <revisions_dir>。现在打开alembic.ini并查找 sqlalchemy.url–应该在这里输入身份验证 以及数据库的位置。

(或者,也可以将此信息保存在 环境变量,我们将在后面解释。)

现在打开<revisions_dir>/env.py,查找下面的行 target_metadata = None并将其更改为类似于

importjsonimportsqlnosqlfromsqlalchemyimportMetaDataschema=json.load(open('path/to/schema.json'))target_metadata=MetaData()table=sqlnosql.schema.create_table(schema,target_metadata,pk='my_primary_key_column')

这就是它的全部设置。

现在,要创建新的修订版(也称为迁移),请运行 alembic revision --autogenerate。alembic将生成一个python文件 包含upgradedownload函数。它会告诉你 此文件的路径,在应用迁移之前 检查该文件以确保它建议的数据库操作是 正确,如果不正确,进行必要的调整。

最后,要运行迁移,请执行alembic upgrade head

有关alembic的更多详细信息,请查看the Alembic tutorial

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java的单元测试测试用例库。util。列出实现   java通过超类进行序列化/反序列化   java Android获取设备语言ISO字符串   java如何打开广告的行动。移动   Eclipse IDE for(嵌入式C/C++)开发者202012:经典的深色主题深黑色背景和菜单中的文本   java使用不同的内容动态创建TableView(JavaFX)   java JAXB将多个同名节点解组   java ClassDefNotFoundException,即使类由类加载器加载(服务器上安装了多个应用程序)   java有没有办法关闭在后端生成的MqttClient线程?   html如何在网站上的java小程序中包含图像?   java无法访问已分配给超类引用的子类实例变量   java在TableViewer中双击打开对话框   列出如何创建ListNode。JAVA   java如何从文本中输出的数组中放入随机图像