【发布时间】:2015-03-29 09:57:57
【问题描述】:
我从How do I get a raw, compiled SQL query from a SQLAlchemy expression? 获得了以下代码,它运行良好,直到我们从 Python 2.7 迁移到 Python 3.4。我做了一些改变,虽然我被困住了
return (comp.string.encode(enc) % params).decode(enc)
错误为 %: 'bytes' and 'dict' 的操作数类型不受支持
def compile_query(query):
dialect = query.session.bind.dialect
statement = query.statement
comp = compiler.SQLCompiler(dialect, statement)
comp.compile()
enc = dialect.encoding
params = {}
for k,v in comp.params.iteritems():
if isinstance(v, unicode):
v = v.encode(enc)
params[k] = sqlescape(v)
return (comp.string.encode(enc) % params).decode(enc)
【问题讨论】:
-
在 Python 2 中,字符串是 ASCII,但在 Python 3 中,它们是 Unicode。因此,在大多数情况下,您不需要手动进行 encode() 和 decode()。有关 Python 3 Unicode 支持的更多信息:docs.python.org/3/howto/unicode.html
-
@dylrei 做到了,谢谢
标签: python postgresql sqlalchemy python-3.4