falsk-ORM的使用-数据库表的创建
1、ORM
ORM是一种对象映射关系,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据间的转换,常用框架是(SQLAlchemy,MongoEngine)
FLask使用对象关系映射(ORM)框架(SQLAlchemy,MongoEngine)去操作数据库。现在我们梳理一下对象和数据库之间的对应关系
模型----数据库
类 -- 表结构
对象--表的一行数据
属性--表字段
比如我们建一个user表,那这个user表就是代表一个类(这个类必须继承db.Model),user表的每一个用户(每一行数据)就是user类里面的一个对象,对象的属性就是表字段,搞清楚这个关系我们实际看代码,我们在models.py中建一个user表
2、 创建表
with app.app_context():db.create_all() # 会根据 User 类自动创建 表#with app.app_context(): 是 Flask 中安全执行应用级操作的标准方式#直接写 db.create_all()会报错
但是这个创建表的操作什么时候调用呢?为什么执行了他就会创建表?他怎么知道要创建的表是哪些?
当你调用 db.create_all()
时,SQLAlchemy 会:
(1) 扫描所有继承自 db.Model
的类
(2)读取模型的 __tablename__
和字段定义
(3) 生成建表 SQL 并执行
关键问题:SQLAlchemy 如何知道你的模型?
(1)模型类必须被 Python 解释器加载
(2)必须在 db.create_all()
前注册模型
-
如果模型定义在另一个文件,需确保它在
db.create_all()
调用前被加载。 -
最佳实践:集中导入所有模型(例如在
__init__.py
或主应用中)。
下面这个就是我的模型,我的目的是创建一个user表,名字叫做tb_user,当我在执行 db.create_all()之前引入了下面这个模型之后,
SQLAlchemy扫描到继承自 db.Model
的类User,读取模型的 __tablename__
和字段,然后生成tb_user表
# models.py : 模型,数据库
from ...exts import db
# 模型 数据库
# 类 ==> 表结构
# 类属性 ==> 表字段
# 一个对象 ==> 表的一行数据# 模型Model:类
# 必须继承 db.Model
class User(db.Model):# 表名__tablename__ = 'tb_user'# 定义表字段#创建一个id字段,int类型,作为主键、自增id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(30), unique=True, index=True)age = db.Column(db.Integer, default=1)sex = db.Column(db.Boolean, default=True)salary = db.Column(db.Float, default=100000, nullable=False)salary2 = db.Column(db.Float, default=100000, nullable=False)# 6921
# db.Column : 表示字段
# db.Integer:表示整数
# primary_key=True : 主键
# autoincrement=True : 自动递增
# db.String(30): varchar(30) 可变字符串
# unique=True : 唯一约束
# index=True : 普通索引
# default=1 : 默认值
# nullable=False : 是否允许为空
最后附上千峰教育整理的数据库字段类型和约束条件
字段类型
常用约束
3、操作表
下面我们模拟一下注册功能往数据库中加入注册的用户
在注册接口中我们传进来name和age
u = User()#生成user表对象(每一行)u.name = name#接口中传进来的name字段u.age = age#接口中传进来的age字段db.session.add(u)#添加try:db.session.commit() # 事务提交return jsonify(code=1, info="操作成功")except Exception as e:db.session.rollback() # 回滚return json.dumps({'code':0,'err':str(e)}) # 这里修改为str(e)
通过上述操作可以把传进来的数据加入到user表中,到到此我们完成了表的创建以及数据的写入,下一章我们开始详细的增删改查,