如何在Python中转义哈希符号(#)?

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'

有没有什么方法可以避免这种情况?似乎不太可能在变量名中使用哈希符号。我今天才开始学习Python,如果答案是常识,请原谅。

谢谢,Pete

4个回答

8

使用 getattr 函数

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

一般来说,处理不合法的Python标识符属性的方法如下。例如,你可以这样写:

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

此外,正如JG所建议的那样,您可以给列取一个别名,例如通过以下方式:
SELECT LPPDR# AS LPPDR ...

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
问题已经得到解答,但这只是另一种选择(基于Adam Bernier的答案+元组拆包),我认为这是最干净的方法:
for row in self.cursor:
    p = Patient()
    p.last, p.pcp = row

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接