Here是从insert获取原始sql的答案,我想知道如果我使用session.add()
,我是否可以获得原始sql,如:
session.add(ormclass).compile()
答案 0 :(得分:2)
如果您希望SQLAlchemy记录实际的原始SQL查询,您始终可以在echo=True
方法上设置create_engine
。我知道这似乎很简陋,但这是查看已执行查询的最简单方法。
engine = create_engine("postgresql://localhost/dbname", echo=True)
答案 1 :(得分:1)
我对此的暂时解决方案是,当发生错误时,会出现异常,并且在此异常中有参数和语句。
except Exception as inst:
print(inst.statement % inst.params)
但问题仍然存在,因为如果没有例外,我无法获取语句和参数。另外,打印中的字符串没有引号,因此字符串不能直接在mysql中执行。
答案 2 :(得分:1)
我显示原始sql的方式(最常用[但不是全部]):
query = [my query that I created]
from sqlalchemy.dialects import mysql
str_query = query.compile(dialect=mysql.dialect(), compile_kwargs={"literal_binds": True})
然后我可以打印sql_query
语句,它会显示带参数的查询。某些查询不会显示,例如批量插入。