[英]Perl, Inserting a 2D hash into mySQL db
我有2D哈希,必須在mySQL db中插入。現在,mysql表(報告)中的列名稱與
'vm_uuid'
'ip_addr'
'name'
'config_name'
'PrimaryKey'
'ComputeNode'
哈希的數據轉儲器是:
p Dumper %Final
$VAR1 = 'ZTestName1',
$VAR2 = { 'vm_uuid' => '096a18bd-5955-465f-9bd4-d6bd038a4a56|',
'ip_addr' => '107.250.172.198|172.26.3.8|',
'name' => 'tap6f684e07-7a|tapa19310a9-7a|',
'config_name' => 'TestValue',
'PrimaryKey' => 'TestName',
'ComputeNode' => 'TestName',
$VAR3 = 'DummyName1';
$VAR4 = { 'PrimaryKey' => '',
'ComputeNode' => 'TestName',
'ip_addr' => '|',
'vm_uuid' => '|',
'name' => 'bond0.2004|vhost0|pkt0|',
'config_name' => '|' };
$VAR5 = 'DummyName2';
$VAR6 = { 'name' => 'tap98655839-61|',
'config_name' => 'TestValue',
'ip_addr' => '107.250.162.244|',
'vm_uuid' => '903904a7-6b05-489c-9945-ee69cbf5c94f|',
'ComputeNode' => 'TestName',
'PrimaryKey' => 'MULTI-SITE: TESTING FOR MULTI-SITE FOR 1607' };
$VAR7 = 'ZTestName2',
$VAR8 = { 'ComputeNode' => 'TestName',
'PrimaryKey' => 'ZTestName',
'config_name' => 'TestValue',
'name' => 'tap2000b14d-29|tap3ea0942c-66|tap479c2ab0-4e|tapc1c4f00b-de|',
'ip_addr' => '107.239.45.6|107.250.169.168|107.243.36.9|107.239.44.9|',
'vm_uuid' => 'ae7aa321-6e3a-4572-a783-ebfcf250ed98|' };
我正在嘗試的代碼是
my @keys = keys %Final;
my @values=values %Final; #value to be inserted - this doesnt work, as its hash ref in my opinion
my $sth=$dbh->prepare("INSERT INTO `$table`(@keys) VALUES (@values)");
這段代碼將獲取鍵名和值(本身就是哈希引用)..將上面介紹的2D哈希數據插入到mysql表中的好方法是什么?
嘗試類似的東西:
foreach my $real_hashref_to_insert ( values %Final ){
my @keys = keys %$real_hashref_to_insert;
my @values = values %$real_hashref_to_insert;
my $field_placeholders = join ", ", map {'?'} @keys;
my $sth=$dbh->prepare("INSERT INTO `$table`(".join ',' @keys.") VALUES ($field_placeholders)");
$sth->execute(@{$real_hashref_to_insert}{@keys}); #hash slice
}
這受到Perl Monks上DBI食譜的啟發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.