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'

これを回避する方法はありますか?var名でハッシュが許可されているかどうかは疑わしいようです。今日はPythonを手にしたばかりなので、答えが常識であるなら許してください。

ありがとう、ピート

4

4 に答える 4

7

getattr関数を使用する

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

これは、一般的に、正当なPython識別子ではない属性を処理する方法です。たとえば、あなたは言うことができます

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

また、JGが示唆しているように、次のように言うなどして、列にエイリアスを付けることができます。

SELECT LPPDR# AS LPPDR ...
于 2009-07-19T18:54:25.343 に答える
5

列にエイリアスを付けることができます。つまり、次のようになります。

 self.cursor.execute('select LPPLNM, LPPDR# as LPPDR from BSYDTAD.LADWJLFU')
于 2009-07-19T18:54:48.480 に答える
2

self.cursor.executeタプルを返すので、これも機能します。

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

しかし、私は他の答えを好みます:-)

于 2009-07-19T18:59:32.430 に答える
1

質問は回答済みですが、これは(Adam Bernierの回答+タプルの解凍に基づく)別の選択肢であり、最もクリーンだと思います。

for row in self.cursor:
    p = Patient()
    p.last, p.pcp = row
于 2009-07-19T23:47:49.590 に答える