- SQLAlchemy 教程
- SQLAlchemy - 首页
- SQLAlchemy - 简介
- SQLAlchemy Core
- 表达式语言
- 连接数据库
- 创建表
- SQL表达式
- 执行表达式
- 选择行
- 使用文本SQL
- 使用别名
- 使用UPDATE表达式
- 使用DELETE表达式
- 使用多个表
- 使用多表更新
- 参数有序更新
- 多表删除
- 使用连接
- 使用连接词
- 使用函数
- 使用集合操作
- SQLAlchemy ORM
- 声明映射
- 创建会话
- 添加对象
- 使用Query
- 更新对象
- 应用过滤器
- 过滤器操作符
- 返回列表和标量
- 文本SQL
- 构建关系
- 处理相关对象
- 使用连接
- 常见的关联操作符
- 提前加载
- 删除相关对象
- 多对多关系
- 方言
- SQLAlchemy有用资源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用资源
- SQLAlchemy - 讨论
SQLAlchemy ORM - 文本SQL
之前,已经从SQLAlchemy核心表达式语言的角度解释了使用text()函数的文本SQL。现在我们将从ORM的角度来讨论它。
通过使用text()结构指定其用法,可以在Query对象中灵活地使用字面字符串。大多数适用方法都接受它。例如,filter()和order_by()。
在下面的示例中,filter()方法将字符串“id<3”转换为WHERE id<3
from sqlalchemy import text for cust in session.query(Customers).filter(text("id<3")): print(cust.name)
生成的原始SQL表达式显示了将filter转换为带有如下所示代码的WHERE子句:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email FROM customers WHERE id<3
从我们Customers表中的示例数据中,将选择两行,并打印name列,如下所示:
Ravi Kumar Komal Pande
要使用基于字符串的SQL指定绑定参数,请使用冒号,要指定值,请使用params()方法。
cust = session.query(Customers).filter(text("id = :value")).params(value = 1).one()
在Python控制台中显示的有效SQL如下所示:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email FROM customers WHERE id = ?
要使用完全基于字符串的语句,可以将表示完整语句的text()结构传递给from_statement()。
session.query(Customers).from_statement(text("SELECT * FROM customers")).all()
上面代码的结果将是一个基本的SELECT语句,如下所示:
SELECT * FROM customers
显然,将选择customers表中的所有记录。
text()结构允许我们将它的文本SQL与Core或ORM映射的列表达式按位置链接。我们可以通过将列表达式作为位置参数传递给TextClause.columns()方法来实现这一点。
stmt = text("SELECT name, id, name, address, email FROM customers") stmt = stmt.columns(Customers.id, Customers.name) session.query(Customers.id, Customers.name).from_statement(stmt).all()
将选择所有行的id和name列,即使SQLite引擎执行上述代码生成的以下表达式显示text()方法中的所有列:
SELECT name, id, name, address, email FROM customers
广告