python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?

这变化也忒快了吧。连问题的题目都变了

这是原题目的回答,多对多关系。

这是我设置的一个博客文章与tag多对多关系的模型,希望对你有所帮助。

class TagSpaces(db.Model):

"""多对多关系表"""

__tablename__ = 'tag_spaces'

tag_id = db.Column(db.Integer, db.ForeignKey('tags.id'), primary_key=True)

article_id = db.Column(db.Integer, db.ForeignKey('articles.id'), primary_key=True)

timestamp = db.Column(db.DateTime, default=datetime.utcnow)

class Tag(db.Model):

"""tag表"""

__tablename__ = 'tags'

id = db.Column(db.Integer, primary_key=True)

name = db.Column(db.String(64), unique=True, index=True)

tagged = db.relationship('TagSpaces',

foreign_keys=[TagSpaces.tag_id],

backref=db.backref('tagged', lazy='joined'),

lazy='dynamic',

cascade='all, delete-orphan')

def __repr__(self):

return '' % self.name

class Article(db.Model):

"""article 表"""

__tablename__ = 'articles'

id = db.Column(db.Integer, primary_key=True)

title = db.Column(db.String(64), index=True)

body = db.Column(db.Text)

......

......

......

tags = db.relationship('TagSpaces',

foreign_keys=[TagSpaces.article_id],

backref=db.backref('tags', lazy='joined'),

lazy='dynamic',

cascade='all, delete-orphan')

def tag(self, tag):

"""写文章的时候,直接往TagSpaces关联表里添加需要关联的 tag 标签"""

if not self.is_tagging(tag):

t = TagSpaces(tags=self, tagged=tag)

db.session.add(t)

def untag(self, tag):

"""从TagSpaces关联表里删除相关标签"""

f = self.tags.filter_by(tag_id=tag.id).first()

if f:

db.session.delete(f)

def is_tagging(self, tag):

"""判断相关标签是否与文章进行了关联"""

return self.tags.filter_by(tag_id=tag.id).first() is not None

@property

def taggeds(self):

"""以article类属性的形式,返回文章的tag标签实例"""

return Tag.query.join(TagSpaces, TagSpaces.tag_id == Tag.id).filter(TagSpaces.article_id == self.id)

article = Article.query.get(1) # 查询一篇文章,返回一个实例对象

print article.taggeds # 返回该篇文章关联的所有 tag 标签的实例对象。

for tag in article.taggeds:

print tag.name

# 循环返回所有的标签的名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值