我想为一些csv文件生成sql插入语句。
我可以使用一行awk脚本来完成此操作,例如:
awk -F "\t" '{printf("INSERT INTO T_COMMON_ENUM_VALUE (id,name,category_id) values (%s, '\''%s'\'', %s, %s);\n", $1, $2, $3, $4)}'
但是这仍然需要一些努力。csvkit中的csvsql似乎会自动生成insert语句。我检查了documentation并使用了以下命令,但它不会生成insert语句。
$ cat data02.csv
db_enumvalue_id db_enumvalue_name db_enumcategory_id
800 şirin 9
$ csvsql data02.csv
CREATE TABLE data02 (
db_enumvalue_id INTEGER NOT NULL,
db_enumvalue_name VARCHAR(18) NOT NULL,
db_enumcategory_id INTEGER NOT NULL
);
它会生成create table语句,但是文档中说:
Generate SQL statements for a CSV file or execute those statements directly on a database.
我应该怎么做才能使用csvkit获得insert sql语句?
4条答案
按热度按时间mnemlml81#
这是一个完全由数据驱动的方法,虽然有点傻,但确实有效。
运行它,你会得到这样的结果:
将其捕获到一个文件中,你就大功告成了。如果你还想自动化插入阶段,也可以将其 Package 在Python子进程调用中,或者通过管道传输到数据库命令行客户端。
如果你要插入到一个已有的表中,这种方法适用于像MySQL这样的数据库管理系统,它可以进行隐式类型转换,因为CSV不能定义字符串和数字之后的字段的数据类型。对于像Postgres这样更严格的数据库管理系统,你需要在脚本文件中编辑数据类型。
bpzcxfmw2#
看看文档,我猜大概是这样的:
如果目标表T_COMMON_ENUM_VALUE已经存在:
如果目标表T_COMMON_ENUM_VALUE不存在:
这应该只输出脚本,如果你想执行语句到你的数据库,你需要添加
--db CONNECTION_STRING
,例如:希望这能帮上忙
eyh26e7m3#
可能没有直接的解决方案来使用csvsql生成插入或删除SQL脚本;至少在我迫切需要的时候我自己找不到一个,但是
--query
选项帮助了我们,它允许我们自己准备这样的语句,当然,它需要一点努力,但是它的回报非常好。下面是一个例子,我有一个csv文件(名为test2.csv),这就是我如何能够为csv文件中的所有行生成插入语句。
确保这是一行,因为csvsql不喜欢断行。
另外,准备好
insert.sql
后,您需要删除标题行,删除双引号(从所有行中),还需要查找= 'null123'
并将其替换为is null
。omjgkv6w4#
https://github.com/Ahmed-M-Salah/CsvToSql
一个C#项目。更新了5-7年前的一个项目的分支。