基本属性
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
# 下面可以写模型类
# 继承模型类 db.model
# 自动生成表名 user_info
class UserModel(db.Model):
"""
flask需要自己写id字段,主键自增唯一
db.Column()代表一行
db.Integer 整数
db.String(32) 字符串
db.DECIMAL(10, 2) 小数
comment=""注释
nullable=False 不允许为空
unique=True 是否唯一
autoincrement=True 自增
onupdate=datetime.now() 自动更新时间
"""
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment="用户id")
username = db.Column(db.String(32), nullable=False, unique=True, comment="用户名")
intro = db.Column(db.Text, comment="用户简介")
age = db.Column(db.Integer, nullable=False, default=18, comment="年龄")
birthday = db.Column(db.DateTime, default=datetime.now(), comment="生日")
login_time = db.Column(db.DateTime, default=datetime.now(), comment="登陆时间", onupdate=datetime.now())
sex = db.Column(db.Boolean, default=False, comment="false男;true女")
money = db.Column(db.DECIMAL(10, 2), default=0, comment="资产")
一对多
# 一对多
# 从表 学生表
class StuModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100), comment="学生名字")
# 建立外键
sub_id = db.Column(db.Integer, db.ForeignKey("sub_model.id"))
# 主表 专业表
class SubModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100), comment="专业名字")
# 设置从表关系 db.relationship("从表名",backref="")
# db.relationship 说明关系 backref="" 以什么样的名字让从表查询主表
stu = db.relationship("StuModel", backref="sub")
多对多---写法一
# 多对多
# 创建中间表
article_tag = db.Table(
"article_tag",
db.Column("article_id", db.Integer, db.ForeignKey("article_model.id"), primary_key=True), # 一张表的外键
db.Column("tag_id", db.Integer, db.ForeignKey("tag_model.id"), primary_key=True) # 另一张表的外键
)
class ArticleModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100), comment="文章名")
tag = db.relationship("TagModel", secondary=article_tag, backref=db.backref("article")) # 任意一张表声明关系
class TagModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(100), comment="标签名")
多对多---写法二
class UserModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(32), comment="用户名")
password = db.Column(db.String(16), comment="密码,加密存储")
order_id = db.relationship("OrderModel", backref="user")
class TonyModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(32), comment="托尼")
price = db.Column(db.Integer, comment="价格")
service_id = db.Column(db.Integer, default=0, comment="服务对象id")
order_id = db.relationship("OrderModel", backref="tony")
class OrderModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
start_time = db.Column(db.DateTime, comment="开始服务时间", default=datetime.now)
end_time = db.Column(db.DateTime, comment="结束服务时间")
price = db.Column(db.DECIMAL(10, 2), comment="价格")
tony_id = db.Column(db.Integer, db.ForeignKey("tony_model.id"), comment="所属托尼")
user_id = db.Column(db.Integer, db.ForeignKey("user_model.id"), comment="所属用户")
自关联
class OfficeModel(db.Model):
__tablename__ = "office_models"
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment="科室分类ID")
office = db.Column(db.String(16), comment="科室标题")
parent = db.relationship("OfficeModel", remote_side=[id])
parent_id = db.Column(db.Integer, db.ForeignKey("office_models.id"), comment="科室分类详情")