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']

适用于 postgres。

这是完整的测试代码:https ://gist.github.com/2506388

我已经向 sqlalchemy 列表报告了这一点,但是同时我想知道是否有其他人遇到类似的问题并且可能有解决方法。

4

1 回答 1

2

将在 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 回答