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