我想知道是否有一种更短的方法来更新整个对象,
假设我有一个声明如下的对象“Package”:
class Package(db.Model):
__searchable__ = ['name','version','maintainer','uploaders']
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(80))
version = db.Column(db.String(15))
architecture = db.Column(db.String(255))
maintainer = db.Column(db.String(255))
sha256 = db.Column(db.String(200))
sha1 = db.Column(db.String(50))
md5sum = db.Column(db.String(50))
depends = relationship('Package',
secondary=package_to_package,
primaryjoin=id==package_to_package.c.left_package_id,
secondaryjoin=id==package_to_package.c.right_package_id,
backref='neededBy')
recommends = relationship('Package',
secondary=package_recommended,
primaryjoin=id==package_recommended.c.left_package_id,
secondaryjoin=id==package_recommended.c.right_package_id,
backref='recommendedBy')
lastUpdate = db.Column(db.DateTime)
distributionId = db.Column(db.Integer,db.ForeignKey('distribution.id'))
componentId = db.Column(db.Integer,db.ForeignKey('component.id'))
status = db.Column(db.String(50))
format = db.Column(db.String(25))
uploaders = db.Column(db.String(255))
def __init__(self,name):
self.name = name
self.lastUpdate = datetime.utcnow()
def __repr__(self):
return '<Package : %r Version : %r Maintainer : %r componentId : %d >' % (
self.name,
self.version,
self.maintainer,
self.componentId)
我有一个芹菜任务来更新这些对象, 我更新此对象的第一个方法是:
^{pr2}$这种方法不会更新任何内容,所以我必须这样做:
elif isinstance(recordedPackage,Package) :
app.logger.info("updating %r"%(recordedPackage))
recordedPackage.version = package.version
recordedPackage.depends = packagesNeeded
recordedPackage.maintainer = package.maintainer
recordedPackage.md5sum = package.md5sum
recordedPackage.sha1 = package.sha1
recordedPackage.sha256 = package.sha256
recordedPackage.lastUpdate = datetime.utcnow()
[...]
db.session.commit()
这样做非常有活力或干净。
有没有办法更新整个对象(当然没有它的id)?
谢谢你的雨篷
使用
update
方法;我通常创建一个字典以使内容可读:请注意,即使在
add
之后也需要提交,因此请考虑将commit
语句移到if/elif条件之外。在最后,我将dir方法与getattr/setattr一起使用
看起来像这样:
在类中实现一个
update
方法,如GG\这样我就不更新InstanceState等了,
^{pr2}$我可以在以后添加一些检查(例如名称应该相同等等)
在解析包的方法上给了我这样的信息:
谢谢你的建议
相关问题 更多 >
编程相关推荐