Przykład:Sqlalchemy - jak uzyskać surowy sql z instrukcji insert(), update() z powiązanymi paramami?
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())
Rezultat tego jest:
UPDATE test SET b=%s WHERE test.a = %s
INSERT INTO test (a, b) VALUES (%s, %s)
Pytanie brzmi, jak zrobić sqlalchemy generować smth takiego:
UPDATE test SET b=2 WHERE test.a = 1
INSERT INTO test (a, b) VALUES (1, 1)
Dla select
, compile_kwargs= {"literal_binds": True}
rozwiązuje problemu, ale to nie działa dla update
, insert
.
Dzięki za pomoc.
P.S. Muszę budować surowe kwerendy sql z orm, więc wszelkie sugestie innych orm, które mają łatwy sposób generowania raw sql, są mile widziane.
możliwy duplikat [SQLAlchemy: wydrukuj aktualne zapytanie] (http://stackoverflow.com/questions/5631078/sqlalchemy-print-the-actual-query) – metatoaster
spróbuj umieścić w cudzysłowach? – Busturdust
Zobacz FAQ SQLAlchemy: [Jak wyrenderować wyrażenia SQL jako łańcuchy, ewentualnie z wbudowanymi parametrami związanymi?] (Http://docs.sqlalchemy.org/en/rel_1_0/faq/sqlexpressions.html#how-do-i-render -sql-wyrażenia-jako-łańcuchy-ewentualnie-z-związanymi-parametrami-podkreślonymi). Powinieneś użyć 'literal_binds = True'. – van