前提: settings.py已经连接数据库
  
  两张表想要互相调用 必须定义主外键约束,外键定义在多的一方

(1). 新建 apps / user / models.py 创建用户相关模型类
from datetime import datetime
from ext import db
class User(db.Model):
    # 用户表
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(15), nullable=False)
    password = db.Column(db.String(128), nullable=False)
    phone = db.Column(db.String(11), unique=True, nullable=False)
    email = db.Column(db.String(30))
    icon = db.Column(db.String(100))
    isdelete = db.Column(db.Boolean, default=False)
    radtetime = db.Column(db.DateTime, default=datetime.now)
    # 代码层次: 不需要迁移,只要建立外键,就需要加relationship
    # 增加一个字段:db.relationship("关联的外键信息表","反向引用:外键能关联到主键信息表")
    articles = db.relationship("Article", backref='user')
    comments = db.relationship('Comment', backref="user")
    def __str__(self):
        return self.username
class Photo(db.Model):
    # 相册表
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    photo_name = db.Column(db.String(50), nullable=False)
    photo_datetime = db.Column(db.DateTime, default=datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    def __str__(self):
        return self.photo_name
class AboutMe(db.Model):
    # 关于我页面
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.BLOB, nullable=False)
    pdatetime = db.Column(db.DateTime, default=datetime.now)
    # 要与用户建立联系
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), unique=True)
    user = db.relationship("User", backref="about")
class MessageBoard(db.Model):
    # 留言
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.String(255), nullable=False)
    mdatetime = db.Column(db.DateTime, default=datetime.now)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    # 关系:
    user = db.relationship('User', backref='messages')
(2). 新建 apps / articie/ models.py 创建文章相关模型类
from datetime import datetime
from ext import db
class Article_type(db.Model):
    # 文章分类
    # 生成表的时候提示错误? 可能是因为外键绑定的id内容不存在,还不允许为空
    # __tablename__ = "type"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    type_name = db.Column(db.String(20), nullable=False)
    articles = db.relationship("Article", backref='article_type')
class Article(db.Model):
    # 文章表
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(50), nullable=False)
    content = db.Column(db.Text, nullable=False)
    pdatetime = db.Column(db.DateTime, default=datetime.now())
    click_num = db.Column(db.Integer, default=0)
    save_num = db.Column(db.Integer, default=0)
    love_num = db.Column(db.Integer, default=0)
    # 文章定义用户外键
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    # 文章定义分类外键
    type_id = db.Column(db.Integer, db.ForeignKey('article_type.id'), nullable=False)
    # 只是通过文章找评论表中的评论内容
    comments = db.relationship("Comment", backref="article")
class Comment(db.Model):
    # 评论表
    # 数据库默认表名为小写类名,自定义表名
    # __tablename__ = 'comment'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    comment = db.Column(db.String(255), nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    article_id = db.Column(db.Integer, db.ForeignKey('article.id'))
    cdatetime = db.Column(db.DateTime, default=datetime.now)
    def __str__(self):
        return self.comment
(3). 将模型引入app.py中
from apps.user.models import *
from apps.articie.models import *
(4). 指令生成模型,迁移数据库
python app.py db init
python app.py db migrate
python app.py db upgrade


















