1

SQLAlchemy 0.7.6 を使用しています。列を次のようにエイリアシングしています:

column = table.c["name"].label("foo.bar")

また、SQLite は結果フィールドのエイリアスとして「bar」のみを使用します。そのための回避策はありますか?

コード例:

create_table("sqlite:////tmp/test.sqlite", schema)

engine = create_engine(url)
metadata = MetaData(engine, reflect=True)
table = Table("test_table", metadata, schema=schema, autoload=True)

column = table.c["name"].label("foo.bar")
cursor = sql.expression.select([column])
row = cursor.execute().fetchone()

print "keys are: %s" % (row.keys(), )

印刷します:

keys are: [u'bar']

それ以外の:

keys are: [u'foo.bar']

ポストグルで動作します。

ここに完全なテスト コードがあります: https://gist.github.com/2506388

私はすでに sqlalchemy リストにそのことを報告しましたが、それまでの間、他の誰かが同様の問題を経験しており、回避策があるかどうかを知りたいです。

4

1 に答える 1

2

engine オプションを使用して SQLAlchemy にパッチを適用する予定です。詳細については、メーリング リストのスレッドを参照してください。

その間、回避策は次のとおりです。

# select is sqlalchemy.sql.expression.select() 
# each selected column was derived as column = table.c[reference].label(label_with_dot)

labels = [c.name for c in select.columns]
...
record = dict(zip(labels, row))

パッチ後の解決策は次のとおりです。

conn = engine.connect().execution_options(sqlite_raw_colnames=True)
result = conn.execute(stmt)
于 2012-04-29T18:15:58.073 に答える