我目前的 perl 代码如下所示:
@valid = grep { defined($column_mapping{ $headers[$_] }) } 0 .. $#headers;
...
my $sql = sprintf 'INSERT INTO tablename ( %s ) VALUES ( %s )',
join( ',', map { $column_mapping{$_} } @headers[@valid] ),
join( ',', ('?') x scalar @valid);
my $sth = $dbh->prepare($sql);
...
my @row = split /,/, <INPUT>;
$sth->execute( @row[@valid] );
这基本上是从 csv 数据动态构建 SQL 插入语句,并且只允许从我的列映射中选取具有正确标题的 csv 数据。
我一直在寻找有关如何一次插入多行数据的插入语句的示例。
我的 Perl 脚本需要运行大约几亿条插入语句,而且一次执行一个语句似乎非常慢,特别是因为我运行它的服务器只有 6GB 内存和缓慢的互联网连接。
有没有办法可以一次上传多于一行的数据?那么一条插入语句可能会上传 50 行,或者一次上传 100 行?我不知道如何使用 perl DBI。
最佳答案
my $sql_values = join( ' ', ('(?, ?, ?)') x scalar(@array) );
正如之前所说,然后你可以把它压平。
关于mysql - Perl将许多插入语句插入mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101823/