- SQLAlchemy 教程
- SQLAlchemy - 首页
- SQLAlchemy - 简介
- SQLAlchemy Core
- 表达式语言
- 连接数据库
- 创建表
- SQL 表达式
- 执行表达式
- 选择行
- 使用文本 SQL
- 使用别名
- 使用 UPDATE 表达式
- 使用 DELETE 表达式
- 使用多个表
- 使用多表更新
- 参数有序更新
- 多表删除
- 使用连接
- 使用连接词
- 使用函数
- 使用集合操作
- SQLAlchemy ORM
- 声明映射
- 创建会话
- 添加对象
- 使用 Query
- 更新对象
- 应用过滤器
- 过滤器操作符
- 返回列表和标量
- 文本 SQL
- 构建关系
- 处理相关对象
- 使用连接
- 常见的关联操作符
- 急切加载
- 删除相关对象
- 多对多关系
- 方言
- SQLAlchemy 有用资源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用资源
- SQLAlchemy - 讨论
SQLAlchemy ORM - 更新对象
本章我们将学习如何修改或更新表中所需的值。
要修改任何对象的某个属性的数据,我们必须为其分配新值并提交更改以使更改持久化。
让我们从主键标识符为 2 的 Customers 表中提取一个对象。我们可以使用会话的 get() 方法,如下所示:
x = session.query(Customers).get(2)
我们可以使用以下代码显示所选对象的内容:
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
从我们的客户表中,应该显示以下输出:
Name: Komal Pande Address: Koti, Hyderabad Email: komal@gmail.com
现在我们需要更新 Address 字段,并分配如下所示的新值:
x.address = 'Banjara Hills Secunderabad' session.commit()
更改将持久地反映在数据库中。现在我们使用**first() 方法**获取表中第一行的对应对象,如下所示:
x = session.query(Customers).first()
这将执行以下 SQL 表达式:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email FROM customers LIMIT ? OFFSET ?
绑定参数分别为 LIMIT = 1 和 OFFSET = 0,这意味着将选择第一行。
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
现在,以上代码显示第一行的输出如下:
Name: Ravi Kumar Address: Station Road Nanded Email: ravi@gmail.com
现在更改 name 属性并使用以下代码显示内容:
x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
以上代码的输出为:
Name: Ravi Shrivastava Address: Station Road Nanded Email: ravi@gmail.com
即使显示了更改,它也没有提交。您可以使用以下代码中的**rollback() 方法**保留之前的持久位置。
session.rollback()
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
将显示第一条记录的原始内容。
对于批量更新,我们将使用 Query 对象的 update() 方法。让我们尝试在每一行(ID != 2 除外)的 name 前添加前缀“Mr.”。相应的 update() 语句如下:
session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
update() 方法需要两个参数,如下所示:
一个键值对字典,键是要更新的属性,值是属性的新内容。
synchronize_session 属性,用于说明更新会话中属性的策略。有效值为 false:不同步会话;fetch:在更新前执行 select 查询以查找与更新查询匹配的对象;evaluate:对会话中的对象评估条件。
表中的四行中有三行将以“Mr.”为 name 前缀。但是,更改未提交,因此不会反映在 SQLiteStudio 的表视图中。只有在我们提交会话时才会刷新。
广告