【发布时间】:2021-04-26 06:17:49
【问题描述】:
我现在有以下问题:
我有一个只有 2 列的数据库表:ID (primary key, auto increment) 和值 (varchar(100))。
现在我有一个sql 文件来用值填充该表。重点是:首先,文本文件只有单个插入,因此插入的每个值都是单个值。一般不会有问题,如果不是大约 1000 万行...
为了更有趣,我有 5 个这样的表和 5 个带有插入语句的 .sql 文件。
现在我尝试按原样运行 sql 文件,即使只有 100k 行,也需要一个小时......所以插入 1000 万个条目大约需要 100 个小时......所有表的 x5 大约需要500 小时,大约是 21 天。我不想在这里看到任何事情......
现在根据我的阅读,如果一个插入语句包含多个要插入的值...例如:
insert into knownPasswords3 (password)
values ('! -');
insert into knownPasswords3 (password)
values ('! 3');
insert into knownPasswords3 (password)
values ('! 5');
insert into knownPasswords3 (password)
values ('! ?');
insert into knownPasswords3 (password)
values ('! C');
insert into knownPasswords3 (password)
values ('! c');
会变成:
insert into knownPasswords3 (password)
values ('! -','! 3','! 5','! ?','! C''! c');
作为一个例子...根据我的阅读,每个插入语句大约 40 个值将是一个相当不错的值...
这就是我想要得到的。从一个包含 400 个单个语句(作为示例)的 sql 文件到一个包含 10 个语句,每个语句有 40 个值的 sql 文件。
现在我已经尝试了很多正则表达式和 Notepad++ 中的不同方法作为示例,但我无法真正让它工作......
然后,如果 python 可能能够以一种优雅的方式执行此操作(直接将其插入数据库或仅转换文本文件)。我认为插入不会有太大帮助,所以现在我正在寻找一种将文件转换为另一个文件的方法,只是它具有提到的单个语句的减少..
我的伪代码类似于:
open file.sql
i = 0;
for each line in file.sql:
if i==40:
i=0
break
else:
remove text "insert into knownPasswords3 (password) values ("
remove text ");"
add text ,
但是,我已经尝试过了,但无法让这些部件正常工作......
任何人都可以让我走上正确的道路吗?是否有一个库或某事使这更容易?
【问题讨论】:
标签: python mysql sql sql-insert bulkinsert