tk1*_*111 11 python orm sqlalchemy
例:
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像这样生成smth:
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.
谢谢你的帮助.
PS我需要从orm构建原始的sql查询,所以欢迎任何其他有简单生成原始sql的方法的建议.
我刚刚运行了这个片段python 2.7并且SQLAlchemy (1.0.13)它起作用了。
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(), compile_kwargs={"literal_binds": True})
我的输出是:
UPDATE test SET b=2 WHERE test.a = 1
INSERT INTO test (a, b) VALUES (1, 1)
也许你的环境有问题?