例子: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