반응형
다음 표를 고려하십시오.
mysql> select * from vCountryStatus;
+-------------+------------+------+---------+--------+-----------------+
| CountryName | CountryISO | Code | Status | Symbol | CurrencyName |
+-------------+------------+------+---------+--------+-----------------+
| Brazil | BR | 55 | LIVE | BRL | Brazilian Real |
| France | FR | 33 | offline | EUR | Euro |
| Philippines | PH | 63 | LIVE | PHP | Philippino Peso |
+-------------+------------+------+---------+--------+-----------------+
3 rows in set (0.00 sec)
이 테이블을 기반으로 해시를 구성하려고합니다. 이를 위해 다음을 수행합니다.
#!/usr/bin/perl
use DBI;
use Data::Dumper;
my $dbh = DBI->connect("dbi:mysql:database=db", "user", "password", {RaiseError => 1, AutoCommit => 0, FetchHashKeyName => "NAME_lc"}) || die "DB open error: $DBI::errstr";
my $sth = $dbh->prepare("select * from vCountryStatus");
$sth->execute;
my $hash = $sth->fetchall_hashref('countryiso');
print Dumper($hash);
이것이 생성하는 출력은 다음과 같습니다.
$VAR1 = {
'PH' => {
'symbol' => 'PHP',
'status' => 'LIVE',
'countryname' => 'Philippines',
'countryiso' => 'PH',
'currencyname' => 'Philippino Peso',
'code' => '63'
},
'BR' => {
'symbol' => 'BRL',
'status' => 'LIVE',
'countryname' => 'Brazil',
'countryiso' => 'BR',
'currencyname' => 'Brazilian Real',
'code' => '55'
},
'FR' => {
'symbol' => 'EUR',
'status' => 'offline',
'countryname' => 'France',
'countryiso' => 'FR',
'currencyname' => 'Euro',
'code' => '33'
}
};
질문은 왜 해시 (countryiso)의 키가 해시 안의 값에서 반복됩니까?
내가 선호하는 것은 다음 출력입니다.
$VAR1 = {
'PH' => {
'symbol' => 'PHP',
'status' => 'LIVE',
'countryname' => 'Philippines',
'currencyname' => 'Philippino Peso',
'code' => '63'
},
'BR' => {
'symbol' => 'BRL',
'status' => 'LIVE',
'countryname' => 'Brazil',
'currencyname' => 'Brazilian Real',
'code' => '55'
},
'FR' => {
'symbol' => 'EUR',
'status' => 'offline',
'countryname' => 'France',
'currencyname' => 'Euro',
'code' => '33'
}
};
fetchall_hashref DBI 메서드를 사용할 수 있습니까? 아니면 전통적인 방식으로 각 행을 반복하고 즉석에서 해시를 구성해야합니까?
해결 방법
아니요, fetchall_hashref
를 사용하여 수행 할 수 없습니다. 그러나 해시 값을 반복하고 키를 삭제할 수 있습니다.
delete $_->{countryiso} for values %$hash;
참조 페이지 https://stackoverflow.com/questions/3573370
반응형
'MySql' 카테고리의 다른 글
MySQL NameError : 전역 이름 'MySQLdb'가 정의되지 않았습니다. (0) | 2020.11.11 |
---|---|
MySQL where 문으로 mysql 대량 업데이트 (0) | 2020.11.11 |
MySQL 날짜 비교 기능 (0) | 2020.11.11 |
MySQL mysql 테이블의 두 번째 마지막 행 (0) | 2020.11.11 |
MySQL Python에서 AWS Lambda와 함께 MySQL을 사용할 때 발생하는 문제 (0) | 2020.11.11 |
댓글