Flask模型定义 #

一、模型基础 #

1.1 定义模型 #

python
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    
    def __repr__(self):
        return f'<User {self.username}>'

1.2 表名设置 #

python
class User(db.Model):
    __tablename__ = 'users'
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80))

二、字段类型 #

2.1 常用字段类型 #

类型 Python类型 说明
Integer int 整数
String str 字符串
Text str 长文本
Boolean bool 布尔值
DateTime datetime 日期时间
Date date 日期
Time time 时间
Float float 浮点数
Numeric Decimal 精确数值
LargeBinary bytes 二进制数据
JSON dict/list JSON数据

2.2 字段示例 #

python
class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text)
    price = db.Column(db.Float)
    quantity = db.Column(db.Integer, default=0)
    is_published = db.Column(db.Boolean, default=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    updated_at = db.Column(db.DateTime, onupdate=datetime.utcnow)
    data = db.Column(db.JSON)

三、字段约束 #

3.1 常用约束 #

python
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False, index=True)
    age = db.Column(db.Integer, default=0)
    bio = db.Column(db.Text, default='')

3.2 约束参数 #

参数 说明
primary_key 主键
unique 唯一约束
nullable 是否允许空值
default 默认值
index 创建索引
server_default 数据库默认值

四、关系定义 #

4.1 一对多关系 #

python
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80))
    posts = db.relationship('Post', backref='author', lazy=True)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

4.2 一对一关系 #

python
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    profile = db.relationship('Profile', backref='user', uselist=False)

class Profile(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

4.3 多对多关系 #

python
student_course = db.Table('student_course',
    db.Column('student_id', db.Integer, db.ForeignKey('student.id')),
    db.Column('course_id', db.Integer, db.ForeignKey('course.id'))
)

class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    courses = db.relationship('Course', secondary=student_course, backref='students')

class Course(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))

五、下一步 #

接下来让我们学习 数据库操作,了解CRUD操作!

最后更新:2026-03-28