我正在使用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']
适用于postgres。
以下是完整的测试代码:https://gist.github.com/2506388
我已经向sqlalchemy列表报告了,但同时我想知道是否有其他人遇到类似问题并且可能有解决方法。
答案 0 :(得分:1)
使用引擎选项在SQLAlchemy中修补。有关详细信息,请参阅mailing list thread。
同时,解决方法是:
# 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)