第10天:数据库模型(基础)

发布于:2024-06-12 ⋅ 阅读:(150) ⋅ 点赞:(0)

第10天:数据库模型(基础)

数据库模型简介

在Web应用中,数据库模型是数据结构的抽象表示,它们定义了如何存储、检索和操作数据。在Flask中,通常使用SQLAlchemy来定义这些模型。

定义模型
  1. 创建模型类
    • 模型通常作为类定义,继承自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
  1. 字段类型
    • 定义字段及其类型,常见的字段类型包括db.String, db.Integer, db.Float, db.Boolean, db.Text, db.DateTime等。
模型关系
  1. 定义关系
    • 可以定义模型之间的关系,如一对一、一对多和多对多。

示例定义关系

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))
数据库迁移
  1. 创建迁移脚本
    • 使用Flask-Migrate来跟踪模型定义的变更,并生成迁移脚本。

示例创建迁移脚本

flask db migrate -m "Initial migration."
  1. 升级数据库
    • 应用迁移脚本,更新数据库结构。

示例升级数据库

flask db upgrade
操作数据库
  1. 添加数据
    • 创建模型实例并将其添加到数据库会话。

示例添加数据

new_user = User(username='newuser', email='newuser@example.com')
db.session.add(new_user)
db.session.commit()
  1. 查询数据
    • 使用查询构造器查询数据库。

示例查询数据

user = User.query.filter_by(username='newuser').first()
if user:
    print(user.email)
  1. 更新和删除数据
    • 更新或删除数据库中的记录。

示例更新数据

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的理解。


网站公告

今日签到

点亮在社区的每一天
去签到