python - Flask-SQLAlchemy updating whole object -


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