【发布时间】:2013-08-02 09:34:03
【问题描述】:
sub insert {
my ($self) = @_;
my $data = $self->{data};
my $keys = join( ', ', keys $data);
my $values = join( ', ', map qq('$_'), values $data);
my $sql = "INSERT INTO tbl ($keys) VALUES ($values);";
my $sth = $self->{dbh}->prepare($sql);
$sth->execute();
}
我有一种方法可以将哈希引用的内容插入到一个单表 sqlite 数据库中。我想知道如果哈希键还不是列,是否有一种简单的方法可以将列添加到表中。显然,如果其中一个键不是列名,则插入将失败。我可以利用该失败,添加缺少的列,然后重做插入。还是每次要插入数据库时都必须根据所有键检查所有列? (所有键都有 TEXT 值)
【问题讨论】:
-
为每个键发出 ALTER 语句。如果该列已存在,它将失败,如果不存在,它将创建该列。
-
捕获故障(使用
eval或类似 Try::Tiny 之类的东西)并插入列也可以。 -
@ikegami - 为每一列执行改变,每次我想插入都会非常昂贵
-
所以请跟踪您已经尝试过的。