我正在使用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,如果答案是常识,请原谅我。
谢谢,皮特
答案 0 :(得分:7)
使用getattr
功能
p.pcp = getattr(row, "LPPDR#")
通常,这是处理非合法Python标识符的属性的方式。例如,您可以说
setattr(p, "&)(@#$@!!~%&", "Hello World!")
print getattr(p, "&)(@#$@!!~%&") # prints "Hello World!"
此外,正如JG建议的那样,您可以为列添加别名,例如说
SELECT LPPDR# AS LPPDR ...
答案 1 :(得分:5)
您可以尝试为列添加别名,即:
self.cursor.execute('select LPPLNM, LPPDR# as LPPDR from BSYDTAD.LADWJLFU')
答案 2 :(得分:2)
self.cursor.execute
返回一个元组,所以这也可以工作:
for row in self.cursor:
p = Patient()
p.last = row[0]
p.pcp = row[1]
但我更喜欢其他答案: - )
答案 3 :(得分:1)
问题已得到解答,但这只是另一种选择(基于Adam Bernier的回答+元组解包),我认为这是最干净的:
for row in self.cursor:
p = Patient()
p.last, p.pcp = row