簡體   English   中英

Perl,在MySQL數據庫中插入2D哈希

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM