2009-07-19 20 views
3

我正在使用pyodbc来查询一个AS400(不幸),并且一些列名称中有哈希值!这里是一个小例子:如何在python中转义散列(#)字符?

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,所以如果答案是常识,请原谅我。

谢谢,皮特

回答

7

使用getattr功能

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

这一点,在一般情况下,你处理这是不合法的Python标识符属性的方式。例如,你可以说

setattr(p, "&)(@#[email protected]!!~%&", "Hello World!") 
print getattr(p, "&)(@#[email protected]!!~%&") # prints "Hello World!" 

而且,JG建议,你可以给你列一个别名,如说

SELECT LPPDR# AS LPPDR ... 
+0

工程很好,非常感谢! – slypete 2009-07-19 18:57:04

5

你可以试着给列一个别名,即:

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

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

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

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

1

的问题已经回答了,但是这仅仅是另一种选择(根据亚当·伯尼尔的答案+元组拆包),我认为这是最干净的:

for row in self.cursor: 
    p = Patient() 
    p.last, p.pcp = row