生成接受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 .

备选方案

学分

  • 迈克拜尔的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)的参数,用于非命令行使用

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

推荐PyPI第三方库


热门话题
Java中两个ArrayList的内部联接   java如何制作按钮侦听器组方法?   Java位表示法中的字节、字符和int   java如何测试控制台输出代码?   JAXB在编组java时将xmlns添加到元素中   java 安卓 Web服务调用问题   java从按钮中选择多个正确答案   java如何获取sensu服务器事件数据   java如何在编写时添加分隔符。使用openCSV的csv文件   在fedora 23上通过jnlp运行jenkins slave的java问题   如何从java web应用程序创建http可见文件?   java如何在安卓中通过编程改变矢量绘图的颜色   java为什么我总是得到未初始化的变量x?   无法从java/Android Studio中的网站获取数据   ArrayList实现在Java中的最低级别是如何工作的?   java告诉SAX解析器忽略无效字符?   java无法使用JarSplice创建可运行的LWJGL jar   java解析一个包含许多字段的json对象   用于Command+T的java JavaFX密钥组合(新选项卡)   java StreamAPI收集器。groupingBy空集合而不是null