【问题标题】:Translating a perl code, utilising the DBI module, to python with MySQLdb使用 DBI 模块将 perl 代码转换为带有 MySQLdb 的 python
【发布时间】:2016-11-01 07:19:16
【问题描述】:

我的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]?

谢谢!

【问题讨论】:

    标签: python mysql perl


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 1970-01-01
      • 2019-06-26
      • 2017-01-01
      • 1970-01-01
      • 2011-03-26
      • 2012-10-28
      • 2017-05-06
      • 2011-03-14
      相关资源
      最近更新 更多