使用DBI模块将perl代码转换为使用MySQLdb

时间:2016-06-29 14:04:49

标签: python mysql perl

我有很少的python经验,并且我没有perl知识,但我需要将连接到MySQL服务器的perl代码转换为python。

在perl子例程中,在标准连接操作之后,出现的代码为:

my @tmp = @{$dbh->selectall_arrayref( $sql )};

my @types;
foreach my $t (@tmp) {
push @types, @$t[0];
}

return @types;

其中$ sql是MySQL选择查询。我在python函数中要做的是:

cursor = conn.cursor()
cursor.execute( sql )
tmp = cursor.fetchall()
types = list( len( tmp ) )
for item in tmp :
    types.append( item[0] )

return types

我的问题是@ $ t [0]包含什么,是否等同于tmp中的item [0]?

谢谢!

1 个答案:

答案 0 :(得分:0)

你应该能够运行代码来发现等价,但是这两件事是等价的。

在perl示例中导致语法奇怪的是perl在早期对标量,数组和散列进行了非常严格的分离,而数组和散列只能将标量作为存储值。通过在perl中添加引用来快速改进这一点,这些引用是指向数组和哈希的标量,但语法已经设置了这种分离,因此必须将其他操作添加到语言中。

因此,第一行是引用数组引用数组并取消引用外部引用,以便它现在是一个数组引用数组。然后它遍历其中的所有引用,取消引用它们并获取数组中的第一个元素。因为@$t[0]通常看起来很奇怪,所以你会看到它写成$t->[0],它不需要你知道数组解除引用运算符(@)比元素访问运算符({{}更紧密地绑定1}})。