flask开发之创建数据模型和表

本文介绍如何在Flask应用中定义数据模型`User`,该模型基于`user`表,包含id、telephone、username和password字段。通过`db.Column`实例化字段并指定数据类型。在`manager.py`中导入模型后,使用MigrateCommand映射到数据库。完成数据库环境初始化和迁移后,使用MySQL命令查看已创建的`User`表结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、定义数据模型 models

SQLAlchemy 允许我们根据数据库的表结构来创建数据模型, 反之亦可. 所以我们一般无须手动的登录到数据库中使用 SQL 语句来创建表, 我们只需把数据模型定义好了之后, 表结构也就有了.
首先要初始化 SQLAlchemy, 在 models.py 中把 app 对象 传入 SQLAlchemy : 

#encoding:utf-8

from flask_sqlalchemy import SQLAlchemy

# SQLAlchemy 会自动的从 app 对象中的 DevConfig 中加载连接数据库的配置项
db = SQLAlchemy()

db 是 class SQLAlchemy 的实例化对象, 包含了 SQLAlchemy 对数据库操作的支持类集.

接下来, 我们就可以在 models.py 中定义 models 类了:

#encoding: utf-8

from exts import db

class User(db.Model):
    __tablename__='user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    telephone = db.Column(db.String(11),nullable=False)
    username = db.Column(db.String(50),nullable=False)
    password = db.Column(db.String(100),nullable=False)

这样我们就得到了一个 User models, 该模型是基于 user 表的. 该数据表拥有 4 个字段 id/telephone/username/password 对应这由 class db.Column 实例化出来的 4 个对象, 当 class User 继承自 db.Model 时, SQLAlchemy 与 数据库的连接通过就已经自动的 Ready 了.db.Column: 其构造器的第一个参数是可选的, 如果传入实参时, 表示创建的字段名. 反之, 则默认使用该实例化对象的名字(即 User 的类属性名); 第二个参数指定了字段的数据类型.

然后在manger.py中导入User模型

#encoding:utf-8

from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from demo import app
from exts import db
from models import User

manager= Manager(app)

#使用Migrate绑定app和db
migrate = Migrate(app,db)

#添加迁移脚本的命令到manager中
manager.add_command('db',MigrateCommand)

if __name__ == '__main__':
    manager.run()

MigarateCommand会去读取当前导入的模型User并映射到数据库中

最后进入当前项目所在目录:

先初始化当前的数据库环境

python manage.py db init

这时候项目会多出一个migrations文件夹

初始化当前项目的一个迁移环境

python manage.py db migrate

然后

python manage.py db upgrade
这样我们数据库里面就已经创建好User表了,进入数据库进行查看

mysql -u root -p

use db_demo

show tables

desc user

就可以看到我们已经创建好的User表的结构了






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值