将半结构化数据(例如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文件 包含upgrade和download函数。它会告诉你 此文件的路径,在应用迁移之前 检查该文件以确保它建议的数据库操作是 正确,如果不正确,进行必要的调整。
最后,要运行迁移,请执行alembic upgrade head。
有关alembic的更多详细信息,请查看the Alembic tutorial。