4

我正在使用 pyodbc 查询 AS400(不幸的是),并且某些列名中有散列!这是一个小例子:

self.cursor.execute('select LPPLNM, LPPDR# from BSYDTAD.LADWJLFU')

for row in self.cursor:
    p = Patient()
    p.last = row.LPPLNM
        p.pcp = row.LPPDR#

我明显收到这样的错误:

 AttributeError: 'pyodbc.Row' object has no attribute 'LPPDR'

有什么办法可以逃脱吗?似乎怀疑在 var 名称中是否允许使用哈希。我今天刚拿起python,如果答案是常识,请见谅。

谢谢,皮特

4

4 回答 4

7

使用getattr功能

p.pcp = getattr(row, "LPPDR#")

通常,这是您处理不是合法 Python 标识符的属性的方式。例如,你可以说

setattr(p, "&)(@#$@!!~%&", "Hello World!")
print getattr(p, "&)(@#$@!!~%&")  # prints "Hello World!"

此外,正如 JG 建议的那样,您可以为列指定别名,例如说

SELECT LPPDR# AS LPPDR ...
于 2009-07-19T18:54:25.343 回答
5

您可以尝试给列一个别名,即:

 self.cursor.execute('select LPPLNM, LPPDR# as LPPDR from BSYDTAD.LADWJLFU')
于 2009-07-19T18:54:48.480 回答
2

self.cursor.execute返回一个元组,所以这也可以:

for row in self.cursor:
        p = Patient()
        p.last = row[0]
        p.pcp = row[1]

但我更喜欢其他答案:-)

于 2009-07-19T18:59:32.430 回答
1

问题已得到解答,但这只是另一种选择(基于 Adam Bernier 的回答 + 元组拆包),我认为这是最干净的:

for row in self.cursor:
    p = Patient()
    p.last, p.pcp = row
于 2009-07-19T23:47:49.590 回答