帮助使长的SQL INSERT语句可读
项目描述
# sql_insert_writer
[](https://pypi.python.org/pypi/sql_insert_writer)
[](https://circleci.com/gh/18F/sql_insert_writer)
[](https://codeclimate.com/github/18F/sql_insert_writer)
[](https://codeclimate.com/github/18F/sql_insert_writer/coverage)
[](https://gemnasium.com/github.com/18F/sql_insert_writer)
帮助生成高度可读的SQL INSERT语句
调用一个表名创建一个`INSERT INTO... VALUES`语句
```
$ sql_insert_writer pet
INSERT INTO pet (
id,
name,
species_name,
planet,
kg
)
VALUES
(
DEFAULT, -- ==> id
DEFAULT, -- ==> name
DEFAULT, -- ==> species_name
DEFAULT, -- ==> planet
DEFAULT -- ==> kg
)
```
如果添加更多表名,将生成一个`INSERT INTO... SELECT FROM`语句
语句,尽可能匹配目标表和源表中的列名
```
$ sql_insert_writer pet animal
INSERT INTO pet (
id,
name,
species_name,
planet,
kg
)
SELECT
id, -- ==> id
name, -- ==> name
species_name, -- ==> species_name
planet, -- ==> planet
DEFAULT -- ==> kg
FROM animal
```
## 更多使用示例
https://github.com/18F/sql_insert_writer
## 原因
INSERT语句的语法使得很难确定值的目标列是哪一列,
尤其是在有多个列的插入操作中。(我们的五列示例已经不错了,但想象一下五十列的情况!)
注释可以明确数据源和目标之间的联系,但手动添加这些注释既繁琐又容易出错。
明确列出INSERT语句的目标列也是另一项最佳实践,但由于繁琐经常被省略。
sql_insert_writer的输出很少可以立即执行,但它可以节省大量的输入。
## 功能
- 支持 PostgreSQL、SQLite、MySQL
- 使用 --db 选项接受 SQLAlchemy 数据库 URL。默认为环境变量 $DATABASE_URL。
- 可以有任意数量的源表;按指定顺序选择列
- 使用 --tuples 选项可以接受任意数量的元组
- 使用 --cast 选项可以显式转换到目标列类型
## 安装
【安装说明】(docs/installation.rst)
开发安装说明,以便
您可以修改代码并将您的改进回馈给项目,这些说明包含在[CONTRIBUTING文档](CONTRIBUTING.rst)中。
## 计划功能
- 支持更多数据库
- 大致匹配列名
- 尽可能省略自动递增主键列的插入
- 在可能的情况下,预先填充外键的JOIN子句
## 局限性
我们处理大小写敏感的表或列名的方式不佳;对于它们来说,Codd 视其为一种亵渎。
## 致谢
此包是用 [Cookiecutter](https://github.com/audreyr/cookiecutter) 和 [18F/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) 项目模板创建的。
## 公共领域
此项目位于全球 [公共领域](LICENSE.md)。如[CONTRIBUTING](CONTRIBUTING.rst)中所述
> 此项目在美国处于公共领域,且在全世界范围内放弃该作品的版权和相关权利通过[CC0 1.0 Universal 公共领域承诺](https://creativecommons.org/publicdomain/zero/1.0/).
>
> 向此项目的一切贡献都将按照CC0承诺发布。通过提交拉取请求,您同意遵守此放弃版权利益的承诺。
=======
=======
0.1.0 (2017-10-12)
------------------
历史
[](https://pypi.python.org/pypi/sql_insert_writer)
[](https://circleci.com/gh/18F/sql_insert_writer)
[](https://codeclimate.com/github/18F/sql_insert_writer)
[](https://codeclimate.com/github/18F/sql_insert_writer/coverage)
[](https://gemnasium.com/github.com/18F/sql_insert_writer)
帮助生成高度可读的SQL INSERT语句
调用一个表名创建一个`INSERT INTO... VALUES`语句
```
$ sql_insert_writer pet
INSERT INTO pet (
id,
name,
species_name,
planet,
kg
)
VALUES
(
DEFAULT, -- ==> id
DEFAULT, -- ==> name
DEFAULT, -- ==> species_name
DEFAULT, -- ==> planet
DEFAULT -- ==> kg
)
```
如果添加更多表名,将生成一个`INSERT INTO... SELECT FROM`语句
语句,尽可能匹配目标表和源表中的列名
```
$ sql_insert_writer pet animal
INSERT INTO pet (
id,
name,
species_name,
planet,
kg
)
SELECT
id, -- ==> id
name, -- ==> name
species_name, -- ==> species_name
planet, -- ==> planet
DEFAULT -- ==> kg
FROM animal
```
## 更多使用示例
https://github.com/18F/sql_insert_writer
## 原因
INSERT语句的语法使得很难确定值的目标列是哪一列,
尤其是在有多个列的插入操作中。(我们的五列示例已经不错了,但想象一下五十列的情况!)
注释可以明确数据源和目标之间的联系,但手动添加这些注释既繁琐又容易出错。
明确列出INSERT语句的目标列也是另一项最佳实践,但由于繁琐经常被省略。
sql_insert_writer的输出很少可以立即执行,但它可以节省大量的输入。
## 功能
- 支持 PostgreSQL、SQLite、MySQL
- 使用 --db 选项接受 SQLAlchemy 数据库 URL。默认为环境变量 $DATABASE_URL。
- 可以有任意数量的源表;按指定顺序选择列
- 使用 --tuples 选项可以接受任意数量的元组
- 使用 --cast 选项可以显式转换到目标列类型
## 安装
【安装说明】(docs/installation.rst)
开发安装说明,以便
您可以修改代码并将您的改进回馈给项目,这些说明包含在[CONTRIBUTING文档](CONTRIBUTING.rst)中。
## 计划功能
- 支持更多数据库
- 大致匹配列名
- 尽可能省略自动递增主键列的插入
- 在可能的情况下,预先填充外键的JOIN子句
## 局限性
我们处理大小写敏感的表或列名的方式不佳;对于它们来说,Codd 视其为一种亵渎。
## 致谢
此包是用 [Cookiecutter](https://github.com/audreyr/cookiecutter) 和 [18F/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) 项目模板创建的。
## 公共领域
此项目位于全球 [公共领域](LICENSE.md)。如[CONTRIBUTING](CONTRIBUTING.rst)中所述
> 此项目在美国处于公共领域,且在全世界范围内放弃该作品的版权和相关权利通过[CC0 1.0 Universal 公共领域承诺](https://creativecommons.org/publicdomain/zero/1.0/).
>
> 向此项目的一切贡献都将按照CC0承诺发布。通过提交拉取请求,您同意遵守此放弃版权利益的承诺。
=======
=======
0.1.0 (2017-10-12)
------------------
历史