【问题标题】:How to escape a hash (#) char in python?如何在 python 中转义哈希 (#) 字符?
【发布时间】:2009-07-19 18:52:16
【问题描述】:

我正在使用 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,如果回答是常识,见谅。

谢谢,皮特

【问题讨论】:

    标签: python odbc escaping pyodbc


    【解决方案1】:

    使用getattr 函数

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

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

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

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

    SELECT LPPDR# AS LPPDR ...
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2011-06-27
            • 2012-04-23
            • 2015-01-01
            • 1970-01-01
            • 2021-11-19
            • 2014-09-24
            • 2018-02-01
            • 1970-01-01
            相关资源
            最近更新 更多