问题吗
如果使用sqlalchemy在同一postgres数据库中具有关系的表之间存在new和更新,那么最优雅的插入方法是什么?
上下文
用户查看阶段表;可以接受更改,然后在审核后将其发送到生产表。
与生产表相比,舞台表可能有新记录或只有编辑过的记录。
我想出了如何从其他问题的peices中做到这一点,但所有这些都涉及制作一个新对象并指定列名称,例如
rutable.ru=rustage.ru
...ect....
我的模特
class rutable(db.Model):
id = db.Column(db.Integer, primary_key=True)
ru =db.Column(db.String(6), db.ForeignKey('rustage.ru'),unique=True)
class rustage(db.Model):
id = db.Column(db.Integer, primary_key=True)
ru =db.Column(db.String(6), index=True, unique=True)
rutablelink = db.relationship('rutable', lazy='dynamic', backref='ruback')
伪码
#check to see if records exists
if db.session.query(exists().where(models.rutable.id == rurow)).scalar():
rustage=models.rustage.query.filter_by(id=rurow).first()
ruprod=models.rutable.query.filter_by(id=rurow).first()
form = rutable(obj=rustage)
# import pdb;pdb.set_trace()
form.populate_obj(ruprod)
else:
rustage=models.rustage.query.filter_by(id=rurow).first()
#how do i insert rustage into rutable and reset primary key?
#without creating a new obj in which i have to specify each column name?
#e.g. rutable(a=rustage.a,..... 1 million column names (i could use a form?
db.session.commit()
更新
我决定选择表格 这就是我想出来的
rustage=models.rustage.query.filter_by(id=rurow).first()
if db.session.query(exists().where(models.rutable.id == rurow)).scalar():
ruprod=models.rutable.query.filter_by(id=rurow).first()
form = rutable(obj=rustage)
form.populate_obj(ruprod)
else:
ruprod=rutable(ru=rustage.ru)
form = rutable(obj=rustage)
form.populate_obj(ruprod)
rustage.reviewEdit=False
ruprod.reviewEdit=False
db.session.commit()