i wondering if there shorter way update entire object,
let's have object "package" declared :
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) i've got celery task update objects, first approach update object :
if isinstance(package, package): # check if distribution exists recordedpackage = package.query.filter_by(name=package.name, distributionid=package.distributionid, componentid=package.componentid).first() app.logger.debug("does exists ?") if recordedpackage none: package.depends = packagesneeded db.session.add(package) elif isinstance(recordedpackage,package) : app.logger.info("updating %r"%(recordedpackage)) recordedpackage = package db.session.commit() this approach doesn't update anything, had :
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() it's dynamic or clean so.
there way update entire object (without it's id of course) ?
thank awnsers
use update method; create dictionary make things readable:
dct = {"version": package.version, ... , "lastupdate":datetime.utcnow()} recordedpackage.update(dct) db.session.commit() note you'll need commit after add, consider moving commit statement outside if/elif condition.
Comments
Post a Comment