我是个炼金术爱好者。
假设我有一个声明模式的用户表:
class User(Base):
__tablename__ = 'user'
id = Column(u'id', Integer(), primary_key=True)
name = Column(u'name', String(50))
当我知道用户的id而没有将对象加载到会话中时,我会更新这样的用户:
ex = update(User.__table__).where(User.id==123).values(name=u"Bob Marley")
Session.execute(ex)
我不喜欢使用User.__table__
,我应该停止担心吗?
有更好的办法吗?
谢谢!
通过表对象上的
update()
方法也可以使用类似的功能。使用
User.__table__
是如何在SQLAlchemy中完成的。您在这里处理的是子句级别,而不是模型/实体/对象级别。子句级别低于映射对象。是的,要把一个词转换成另一个词必须做些什么。
您还可以停留在对象级别并执行以下操作:
但由于它会导致映射对象的构造,因此速度会慢得多。我不确定它是否更可读。
在您提供的示例中,我看到了最自然和“正确”的解决方案。我不会担心小小的魔法。
在ORM级别也有一些更新功能。它还没有处理任何棘手的情况,但对于单行更新(或批量更新)的小情况,它工作得很好。它甚至会遍历任何已加载的对象,并对它们应用更新。你可以这样使用它:
相关问题 更多 >
编程相关推荐