python - sqlalchemy+sqlite 去除带点的列名?

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

最佳答案

将使用引擎选项在 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/

相关文章:

python - 分组数据框并获得总和和计数?

python - Dockerfile RUN 命令返回 "No such file or directory"

SQL查询以匹配多个字符串之一

python - 无法使用 SqlAlchemy pickle 对象错误

python - sqlacodegen 不生成任何表

python - Flask-SQLAlchemy 摆脱 `idle in transaction`

python - 如何在虚拟环境中使用 apache Airflow ?

php - 如何从 Laravel 获取 CSRF token 并将其传递到 python 脚本中

c# - 如何从代码生成 CREATE TABLE 脚本?

c# - 使用 View 的 MySQL 数据库报告