遇到一個問題,文章類型是一個表,文章是一個表,中間表存放了其關係
逆向分析模型
這一個實體類模型
models.py
from main import db
class Base(db.Model):
"""基類"""
# 作爲父類被繼承,不會被創建成表(抽象)
__abstract__ = True
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
def save(self):
db.session.add(self)
db.session.commit()
def delete(self):
db.session.delete(self)
db.session.commit()
def update(self):
db.session.commit()
class Type(Base):
__tablename__ = "type"
name = db.Column(db.String(32),nullable=True) # 類型名
description = db.Column(db.Text,nullable=True) # 描述
class Article(Base):
__tablename__ = "article"
title = db.Column(db.String(32),nullable=True) # 標題
date = db.Column(db.DateTime,nullable=True) # 發表時間
content = db.Column(db.Text,nullable=True) # 內容
description = db.Column(db.Text,nullable=True) # 描述
author_id = db.Column(db.Integer,db.ForeignKey("author.id"),nullable=True) # 所屬作者id
types = db.relationship("Type", secondary="article_type", backref="articles")
class Author(Base):
__tablename__ = "author"
name = db.Column(db.String(32), nullable=True) # 作者
gender = db.Column(db.String(32), nullable=True) # 性別
age = db.Column(db.Integer,nullable=True) # 年齡
email = db.Column(db.String(254),nullable=True)
articles = db.relationship("Article",backref="author")
# 創建中間表
article_type = db.Table(
"article_type", # 中間表名稱
db.Column("id",db.Integer,primary_key=True,autoincrement=True), # 主鍵
db.Column("article_id",db.Integer,db.ForeignKey("article.id")), # 屬性 外鍵
db.Column("type_id",db.Integer,db.ForeignKey("type.id")), # 屬性 外鍵
)
下圖爲兩表數據內容
查詢每中文章類型,有多少篇文章
方案一:
@userbl.route("/select/type/number/")
def select_type_number():
"""查找文章類型和類型下書的數量"""
type_count = db.session.query(Type.name,func.count(article_type)).group_by(Type.name).all()
article_type_list = Type.query.all()
result = []
for article_type1 in article_type_list:
ret = len(article_type1.articles)
result.append({"type_name": article_type1.name, "count": ret})
return "文章類型和類型下書的數量:{}".format(result)
方案二:
@userbl.route("/select/type/number/")
def select_type_number():
"""查找文章類型和類型下書的數量"""
result = Article.query.join(article_type).join(Type).group_by(Type.name).with_entities(Type.name,func.count(Article.id)).all()
return "文章類型和類型下書的數量:{}".format(result)
結果一致