- SQLAlchemy 教程
- SQLAlchemy - 主页
- SQLAlchemy - 简介
- SQLAlchemy 核心
- 表达语言
- 连接到数据库
- 创建表
- SQL 表达式
- 执行表达式
- 选择行
- 使用文本 SQL
- 使用别名
- 使用 UPDATE 表达式
- 使用 DELETE 表达式
- 使用多个表
- 使用多个表更新
- 按参数顺序更新
- 多表删除
- 使用连接
- 使用连词
- 使用函数
- 使用集合运算
- SQLAlchemy ORM
- 声明映射
- 创建会话
- 添加对象
- 使用查询
- 更新对象
- 应用过滤器
- 过滤器运算符
- 返回列表和标量
- 文本SQL
- 建立关系
- 使用相关对象
- 使用连接
- 常见关系运算符
- 急切加载
- 删除相关对象
- 多对多关系
- 方言
- SQLAlchemy 有用资源
- SQLAlchemy - 快速指南
- SQLAlchemy - 有用的资源
- SQLAlchemy - 讨论
SQLAlchemy ORM - 更新对象
在本章中,我们将了解如何使用所需值修改或更新表。
要修改任何对象的某个属性的数据,我们必须为其分配新值并提交更改以使更改持久化。
让我们从 Customers 表中 ID=2 的主键标识符表中获取一个对象。我们可以使用会话的 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
现在我们需要通过分配新值来更新地址字段,如下所示 -
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
现在更改名称属性并使用以下代码显示内容 -
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 除外)。相应的 update() 语句如下 -
session.query(Customers).filter(Customers.id! = 2). update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
update() 方法需要两个参数,如下所示 -
键值字典,key为要更新的属性,value为属性的新内容。
Synchronize_session 属性提到了更新会话中属性的策略。有效值为 false:对于不同步会话,fetch:在更新之前执行 select 查询,查找与更新查询匹配的对象;和评估:评估会话中对象的标准。
表中四分之三的行的姓名将以“先生”为前缀 但是,更改并未提交,因此不会反映在 SQLiteStudio 的表视图中。仅当我们提交会话时它才会刷新。