📅  最后修改于: 2020-11-27 07:36:18             🧑  作者: Mango
目标表对象上的update()方法构造等效的UPDATE SQL表达式。
table.update().where(conditions).values(SET expressions)
结果更新对象上的values()方法用于指定UPDATE的SET条件。如果保留为None,则SET条件是根据在执行和/或编译语句期间传递给语句的参数确定的。
where子句是一个可选表达式,用于描述UPDATE语句的WHERE条件。
以下代码段将students表中“ lastname”列的值从“ Khanna”更改为“ Kapoor”-
stmt = students.update().where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')
stmt对象是一个更新对象,可转换为-
'UPDATE students SET lastname = :lastname WHERE students.lastname = :lastname_1'
当调用execute()方法时,绑定参数lastname_1将被替换。完整的更新代码如下-
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
students = Table(
'students',
meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
conn = engine.connect()
stmt=students.update().where(students.c.lastname=='Khanna').values(lastname='Kapoor')
conn.execute(stmt)
s = students.select()
conn.execute(s).fetchall()
上面的代码显示以下输出,第二行显示更新操作的效果,如给定的屏幕截图所示-
[
(1, 'Ravi', 'Kapoor'),
(2, 'Rajiv', 'Kapoor'),
(3, 'Komal', 'Bhandari'),
(4, 'Abdul', 'Sattar'),
(5, 'Priya', 'Rajhans')
]
请注意,也可以通过使用sqlalchemy.sql.expression模块中的update()函数来实现类似的功能,如下所示-
from sqlalchemy.sql.expression import update
stmt = update(students).where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')