SqlAlchemy的many to many 表更新

SqlAlchemy的many to many表更新

在Python的语言项目中,使用Sqlalchemy的ORM场景很多,在使用过Sqlalchemy之后,会越来越不喜欢写sql语句,而且使用了ORM之后,如果还在代码中写sql片段再拼接,再转义执行,效率低而且显得代码臃肿,sqlalchemy的many to many表更新官方文档写的比较简单,在自己尝试后有一些心得体会可以分享下

Demo table
    page_tag_relate=db.Table('page_tag_relate',db.Colum('tag_id',db.Integer,db.ForeignKey('tag.id')),db.Column('page_id',db.Integer,db.ForeignKey('page.id')))

class Page(db.Model):
    __tablename__ = 'page'
    id=db.Column(db.Integer,primary_key=True)
 tags=db.relationship('Tag',secondary=page_tag_relate,backref=db.backref('pages',lazy='dynamic'))

class Tag(db.Model):
    __tablename__ = 'tag'
    db=db.Column(db.Integer,primary_key=True)

两张表同时插入新对象

如果场景需要插入Page的同时,也插入tag
做法是新创建888的对象

page_ins_info_dict = {"id": '333'}
page = Page(**page_ins_info)
tag = Tag(id='888') #表中并没有888,是新插入
page.tags.append(tag)
db.session.add(page)
db.session.commit()

单张表插入新对象,另外一张使用原来的数据

如果是场景tag里面已经有888,只需要新插入一个page,并关联到888
做法是将888的对象查找到,并传进到关联表对象里面

page_ins_info_dict = {"id": '333'}
page = Page(**page_ins_info)
tag = db.session.query(Tag).filter(Tag.id=='888').all()
page.tags = tag
db.session.add(page)
db.session.commit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值