📅  最后修改于: 2020-11-27 07:45:42             🧑  作者: Mango
在本章中,我们将看到如何用所需的值修改或更新表。
要修改任何对象的某个属性的数据,我们必须为其分配新值并提交更改以使更改持久化。
让我们从ID为2的客户表中的主键标识符表中获取一个对象。我们可以使用session的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()方法需要两个参数,如下所示:
键值字典,键为要更新的属性,值为属性的新内容。
syncnize_session属性提到了更新会话中属性的策略。有效值为false:为了不同步会话,fetch:在更新之前执行选择查询以查找与更新查询匹配的对象;否则,取值为0。和评估:评估会话中对象的条件。
表格中4行中的3行将以’Mr’开头。但是,更改不会被提交,因此不会反映在SQLiteStudio的表视图中。仅当我们提交会话时,它才会刷新。