例子:Sqlalchemy - 如何从insert(),update()语句和绑定参数获取原始sql?
from sqlalchemy.dialects import mysql
from sqlalchemy import Integer, Column, update, insert
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Test(Base):
__tablename__ = "test"
a = Column(Integer, primary_key=True)
b = Column(Integer)
update_stmt = update(Test).where(Test.a == 1).values(b=2)
print update_stmt.compile(dialect=mysql.dialect(), compile_kwargs= {"literal_binds": True})
insert_stmt = insert(Test).values(a=1, b=1)
print insert_stmt.compile(dialect=mysql.dialect())
结果的是这样的:
UPDATE test SET b=%s WHERE test.a = %s
INSERT INTO test (a, b) VALUES (%s, %s)
的问题是如何让SQLAlchemy的产生水木清华这样的:
UPDATE test SET b=2 WHERE test.a = 1
INSERT INTO test (a, b) VALUES (1, 1)
对于select
,compile_kwargs= {"literal_binds": True}
解决了这个问题,但它不适用于update
,insert
。
感谢您的任何帮助。
P.S.我需要从orm构建原始的sql查询,因此任何其他orms的建议,都可以通过简单的方式生成原始sql,这是值得欢迎的。
可能重复的[SQLAlchemy:打印实际查询](http://stackoverflow.com/questions/5631078/sqlalchemy-print-the-actual-query) – metatoaster
尝试把它放在引号中? – Busturdust
请参阅SQLAlchemy常见问题解答:[如何将SQL表达式呈现为字符串,可能绑定参数内联?](http://docs.sqlalchemy.org/en/rel_1_0/faq/sqlexpressions.html#how-do-i-render -sql表达式-作为串 - 可能与 - 结合的参数内联)。你应该使用'literal_binds = True'。 – van