2009-07-19 61 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