sqlalchemy + sqlite用点删除列名?

时间:2012-04-27 06:37:31

标签: python sql sqlalchemy

我正在使用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列表报告了,但同时我想知道是否有其他人遇到类似问题并且可能有解决方法。

1 个答案:

答案 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)