SQLite:如果列不存在,则动态添加列

时间:2013-08-01 16:46:11

标签: perl sqlite dbi

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值)

1 个答案:

答案 0 :(得分:2)

根据您使用PRAGMA

获得的信息更改您的表格
my $inf_query = $db->prepare("PRAGMA table_info('tbl')");
$inf_query->execute();
my @inf = map { $_->[1] } @{$inf_query->fetchall_arrayref()};

@inf将是一个包含表格中列的列的数组,您可以使用该信息构建ALTER查询。

编辑返回可用于grep的数组;)