第10天:数据库模型(基础)
数据库模型简介
在Web应用中,数据库模型是数据结构的抽象表示,它们定义了如何存储、检索和操作数据。在Flask中,通常使用SQLAlchemy来定义这些模型。
定义模型
- 创建模型类:
- 模型通常作为类定义,继承自
db.Model
,每个类对应数据库中的一个表。
- 模型通常作为类定义,继承自
示例模型类 (models.py
):
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
registered_on = db.Column(db.DateTime, default=datetime.utcnow)
def __repr__(self):
return '<User %r>' % self.username
- 字段类型:
- 定义字段及其类型,常见的字段类型包括
db.String
,db.Integer
,db.Float
,db.Boolean
,db.Text
,db.DateTime
等。
- 定义字段及其类型,常见的字段类型包括
模型关系
- 定义关系:
- 可以定义模型之间的关系,如一对一、一对多和多对多。
示例定义关系:
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(140), nullable=False)
body = db.Column(db.Text, nullable=False)
author_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
author = db.relationship('User', backref=db.backref('posts', lazy=True))
数据库迁移
- 创建迁移脚本:
- 使用Flask-Migrate来跟踪模型定义的变更,并生成迁移脚本。
示例创建迁移脚本:
flask db migrate -m "Initial migration."
- 升级数据库:
- 应用迁移脚本,更新数据库结构。
示例升级数据库:
flask db upgrade
操作数据库
- 添加数据:
- 创建模型实例并将其添加到数据库会话。
示例添加数据:
new_user = User(username='newuser', email='newuser@example.com')
db.session.add(new_user)
db.session.commit()
- 查询数据:
- 使用查询构造器查询数据库。
示例查询数据:
user = User.query.filter_by(username='newuser').first()
if user:
print(user.email)
- 更新和删除数据:
- 更新或删除数据库中的记录。
示例更新数据:
user = User.query.get(1)
if user:
user.email = 'newemail@example.com'
db.session.commit()
示例删除数据:
user = User.query.get(1)
if user:
db.session.delete(user)
db.session.commit()
结语
今天,我们学习了如何在Flask中定义数据库模型,以及如何使用SQLAlchemy和Flask-Migrate来管理数据库的变更。掌握数据库模型的创建和操作是构建数据驱动Web应用的重要基础。
记得在你的Flask应用中实践定义模型和执行数据库操作。这是一个很好的机会,可以帮助你加深对数据库模型和ORM的理解。