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

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

你可能感兴趣的:(python封装sql脚本)