当前位置: 首页 > news >正文

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表中,到到此我们完成了表的创建以及数据的写入,下一章我们开始详细的增删改查,


 

http://www.xdnf.cn/news/489889.html

相关文章:

  • 【Linux】动静态库链接原理
  • nnUNet V2代码——图像增强(三)
  • 【数据结构】线性表--栈
  • 金属加工液展|切削液展|2025上海金属加工液展览会
  • 使用unsloth对Qwen3在本地进行微调
  • 一个批量文件Dos2Unix程序(Microsoft Store,开源)1.1.0 编码检测和预览
  • 淘宝扭蛋机系统开发前景分析:解锁电商娱乐化新蓝海
  • HOW - React NextJS 的同构机制
  • Dify中使用插件LocalAI配置模型供应商报错
  • Spring Cloud深度实践:从服务发现到弹性智能API网关全景解析
  • Day29 -JS开发02 -两个实例:dom树(存在dom-xss) 加密及基础的js逆向(明文加密)
  • SAP-ABAP:SAP DMS(文档管理系统)的详细说明,涵盖其核心功能、架构、配置及实际应用
  • spring学习->sprintboot
  • Room数据库
  • Matrix-Game:键鼠实时控制、实时生成的游戏生成模型(论文代码详细解读)
  • Java并发编程-线程池(四)
  • Reth(冗余以太网接口) 和Bridge-Aggregation(链路聚合接口)区别
  • 一个进程中可以有多个 WebView2 控件,它们各自有独立的用户数据目录,COOKIE共享
  • 内存泄漏系列专题分析之十六:高通相机CamX内存泄漏内存占用分析--chi-cdk部分ION内存拆解方法
  • 跳转传参的使用
  • Java生产环境设限参数教学
  • 第六章 进阶10 实习生的焦虑
  • 一文讲透面向对象编程OOP特点及应用场景
  • 深入探索Java微服务架构:Spring Cloud与Kubernetes的整合实践
  • 敏感数据加密和模糊匹配
  • 使用CherryStudio +SiliconFlow 部署独立的deepseek+知识库
  • 文本数据词汇级增强
  • Python 之类型注解
  • MCU开发学习记录16* - 看门狗学习与实践(HAL库) - IWDG与WWDG -STM32CubeMX
  • java加强 -IO流