我正在使用 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 列表报告了这一问题,但同时我想知道是否有其他人遇到类似的问题并且可能有解决方法。
最佳答案
将使用引擎选项在 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)
关于python - sqlalchemy+sqlite 去除带点的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345910/