生成接受python数据的sql ddl
ddlgenerator的Python项目详细描述
从表数据推断sql ddl(数据定义语言)。
在命令行使用:
$ ddlgenerator -i postgresql '[{"Name": "Alfred", "species": "wart hog", "kg": 22}]' DROP TABLE generated_table; CREATE TABLE generated_table ( name VARCHAR(6) NOT NULL, kg INTEGER NOT NULL, species VARCHAR(8) NOT NULL ) ; INSERT INTO generated_table (kg, Name, species) VALUES (22, 'Alfred', 'wart hog');
从文件中读取数据:
$ ddlgenerator postgresql mydata.yaml > mytable.sql
使用表的数据启用单行创建表
$ ddlgenerator –inserts postgresql mydata.json | psql
在python中使用:
>>> from ddlgenerator.ddlgenerator import Table >>> table = Table([{"Name": "Alfred", "species": "wart hog", "kg": 22}]) >>> sql = table.sql('postgresql', inserts=True)
支持的数据格式
- 纯Python
- 山药
- json
- CSV
- 泡菜
- HTML
功能
- 支持sqlalchemy支持的所有sql方言
- 将数据强制为对所有列的值都有效的最特定的数据类型
- 从文件名中获取表名
- 如果未按文件扩展名指定,则猜测输入数据的格式
- 使用-i/--inserts标志,添加insert语句
- 使用-u/--uniques标志,从数据中推测唯一约束
- 处理嵌套数据,根据需要创建子表
- 读取HTML表格,包括嵌入在嘈杂网站中的表格
选项
-h, --help show this help message and exit -k KEY, --key KEY Field to use as primary key -r, --reorder Reorder fields alphabetically, ``key`` first -u, --uniques Include UNIQUE constraints where data is unique -t, --text Use variable-length TEXT columns instead of VARCHAR -d, --drops Include DROP TABLE statements -i, --inserts Include INSERT statements --no-creates Do not include CREATE TABLE statements --save-metadata-to FILENAME Save table definition in FILENAME for later --use- saved-metadata run --use-metadata-from FILENAME Use metadata saved in FROM for table definition, do not re-analyze table structure -l LOG, --log LOG log level (CRITICAL, FATAL, ERROR, DEBUG, INFO, WARN)
生成sqlalchemy模型
使用sqlalchemy作为模型生成用于定义sqlalchemy的python 型号:
$ ddlgenerator sqlalchemy '[{"Name": "Alfred", "species": "wart hog", "kg": 22}]' Table0 = Table('Table0', metadata, Column('species', Unicode(length=8), nullable=False), Column('kg', Integer(), nullable=False), Column('name', Unicode(length=6), nullable=False), schema=None)
生成django模型
如果django安装在路径上,那么使用django作为模型将运行 通过django的inspectdbmanagement命令生成ddl以生成模型 文件:
$ ddlgenerator django '[{"Name": "Alfred", "species": "wart hog", "kg": 22}]' # This is an auto-generated Django model module. # You'll have to do the following manually to clean this up: # * Rearrange models' order # * Make sure each model has one field with primary_key=True # * Remove `managed = False` lines if you wish to allow Django to create and delete the table # Feel free to rename the models, but don't rename db_table values or field names. # # Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]' # into your database. from __future__ import unicode_literals from django.db import models class Table0(models.Model): species = models.CharField(max_length=8) kg = models.IntegerField() name = models.CharField(max_length=6) class Meta: managed = False db_table = 'Table0'
大桌子
到目前为止,ddlgenerator还没有为接近的表大小设计好 系统的可用内存。
为大型表节省时间和内存的一种方法是将输入数据分成多个 文件,然后用--save-metadata对一个 但有代表性的样本。然后使用--no-creates和^{tt12}运行$ 从其余文件生成插入而无需重新确定 每次都是列类型。
安装
需要Python3。
来自PYPI:
pip3 install ddlgenerator
来源:
git clone https://github.com/catherinedevlin/ddl-generator.git cd ddl-generator pip3 install .
备选方案
- csvkit.csvsql
- 熊猫。阅读方法
- prequel对于sqlite
学分
- 迈克拜尔的sqlalchemy
- coldfix和mark ransom的stackoverflow答案
- 奥黛丽·罗伊(Audrey Roy)主唱:Cookiecutter
- 用于Django模型生成的Brandon Lorenz
历史记录
0.1.0(2014-03-22)
- pypi上的第一个版本。
0.1.2(2014-07-15)
- data_dispenser移动到单独的模块
0.1.3(2014-07-16)
- 在短字符串之后发现长整数的错误修复
0.1.4(2014-07-25)
- 修正错误:外部data_dispenser未被0.1.3使用!
0.1.5(2014-07-25)
- sqlalchemy添加了伪方言
0.1.6(2014-07-25)
- 生成sqlalchemy插入
0.1.7(2014-09-14)
- 通过http阅读
- 支持HTML格式
- 生成django模型
0.1.7.1(2014-09-14)
- 需要数据分配器0.2.3
0.1.7.3(2014-10-19)
- 为了简单起见,需要以前推荐的所有依赖项
- 对复数类字段的几个错误修复
0.1.8(2015-02-01)
- 在sqlalchemy输出中正确处理的唯一contstraint
0.1.8.2(2015-02-05)
- 为设备生成更干净的sqlalchemy
0.1.9(2015-02-10)
- 来自Anatoly Technonik,Mikhail Podgurskiy的自述文件修复程序
- 解析传递给generate(args, namespace)的参数,用于非命令行使用