生成接受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@Override   使用BuffereImage加载映像时java高ram使用率   java For循环混乱,为什么不是循环?   java Android网格视图字符串对齐问题   java如何将方法与比较类型的附加功能进行比较?   在Java Swing中放置JSepator后的间隙大小   java如何避免并发访问我的网站中的支付链接   java如何从现有的Unix服务器连接到FTP服务器?   Spring中的java用户相关bean定义   带有scribesjava库的wordpress Woocommerce REST API返回消费者密钥参数缺失错误消息   java我可以自动检测特定设备连接的串行端口吗?   Javafx棋盘游戏   java使用JTextPane显示HTML,支持SVG吗?   SpringBoot如何在java中将映射转换为实体对象?   如何使用java代码对xls文件进行密码保护   Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个生成的值?   Javaservlet启动外部进程