仅使用SqlAlchemy生成SQL代码

14 投票
3 回答
12075 浏览
提问于 2025-04-16 13:17

我可以只用SqlAlchemy的ORM映射器来生成SQL代码吗?

对于简单的表,我可以使用这样的代码:

print users_table.select()
print users_table.insert()
print users_table.update()
print users_table.delete()

但是用ORM我只找到了一种生成SELECT语句的方法:

TestUser = User("John", "Doe")
print session.query(User)

我怎么才能生成INSERT/UPDATE/DELETE的SQL(而不是真的去操作数据库)呢?

谢谢。

3 个回答

3

你可以通过 sqlalchemy.orm.class_mapper 函数来访问映射类的表对象:


users_table = class_mapper(User).mapped_table 
users_table.insert(..)

如果你使用的是声明式语法,你可以这样做:


users_table = User.__table__
users_table.insert(..)
3

这很简单。就像你做的那样,你可以把查询转换成字符串。

TestUser = User("John", "Doe")
# convert querying object to string
query_stat = str(session.query(User))
print query_stat 

在这里,query_stat 应该是一个 SQL 查询语句。

9

也许你想要的是SQLAlchemy的核心表达语言,而不是ORM?

http://www.sqlalchemy.org/docs/core/index.html

ORM是为了和数据紧密结合而设计的,所以它和数据库会话是紧密相连的。而表达语言则可以直接转换成SQL语句。(你只需要把任何生成的对象传给str(),就能得到对应的SQL语句。)

撰写回答