created: 2020-12-22T10:19:03.000Z

perlでmysqlに接続してデータを入れる

SQL::Maker::Plugin::InsertMulti を使ってテストデータをmysqlに入れたい場合に困ったのでメモ。 macOSで普通にやると DBD::mysql が入らないのだが、これは環境変数から設定してなんとかする。

$ cat <<__CPANFILE > ./cpanfile
requires "DBI";
requires "SQL::Maker";
requires "SQL::Maker::Plugin::InsertMulti";
requires "DBD::mysql";
__CPANFILE
# https://twitter.com/yukiex/status/1083252296140578816
$ PATH="$(brew --prefix mysql-client)/bin:$PATH"
$ export LIBRARY_PATH=$(brew --prefix openssl)/lib:$LIBRARY_PATH
$ carton install
#!/usr/bin/env perl
use strict;
use warnings;
use DBI;
use SQL::Maker;
SQL::Maker->load_plugin('InsertMulti');

my $table = 't1';
my @rows = ({ id => 100, name => 'a'}, { id => 200, name => 'b'});
my $s = SQL::Maker->new(driver => 'mysql');
my ($sql, @binds) = $s->insert_multi($table, \@rows);

my $dbh = DBI->connect("dbi:mysql:dbname=test;host=127.0.0.1", "root");
$dbh->prepare($sql)->execute(@binds);

参考