Flask框架种使用ORM模型对MySQL数据库的管理

2023-11-11

通过flask连接MySQL数据库后,使用ORM模型对数据库管理
ORM模型的优点:使用 ORM 做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。支持多个关系数据库引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite 。可以非常轻松的切换数据库。

1.创建数据库

创建用户,其中包括
用户id(int,主键,自增)
用户姓名(varchar,非空)
密码(varchar,非空)等字段
继承db.Model模型成为ORM模型

class User(db.Model):
	# 定义表名
    __tablename__ = "user"
    添加字段,使用db.Column映射成列属性,
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)

with app.app_context():
    db.create_all()

db.Column中常用的数据类型

类型名 Python 类型 说明
Integer int 普通整数,一般是32位
SmallInteger int 取值范围小的整数,一般是 16 位
BigInteger int 或 long 不限制精度的整数
Float float 浮点数
Numeric decimal.Decimal 定点数
String str 变长字符串
Text str 编程字符串,对较长或不限长度的字符串做了优化
Unicode unicode 变长 Unicode 字符串
UnicodeText unicode 变长 Unicode 字符串,对较长或不限长度的字符串做了优化
Boolean bool 布尔值
Date datetime.date 日期
Time datetime.time 时间
DateTime datetime.datetime 日期和时间
Interval datetime.timedelta 时间间隔
Enum str 一组字符串
PickleType 任何 python 对象 自动使用 Pickle 序列化
LargeBinary str 二进制文件

2.增加数据

首先创建对象,然后将对象添加到session中,最后同步到数据库中

@app.route("/user/add")
def add_user():
    # 1.创建ORM对象
    user = User(username="张三", password="1111")
    # 2.将ORM对象添加到db.session
    db.session.add(user)
    # 3.将db.session中的改变同步到数据库中
    db.session.commit()
    return "用户创建成功"

3.查询数据

@app.route("/user/query")
def query_user():
    # 1.get查找:根据主键查找
    # user = User.query.get(1)
    # print(f"{user.id}: {user.username}-{user.password}")
    # 2.filter查找
    # 类列表的对象
    users = User.query.filter(User.username.like("%张%"))
    for user in users:
        print(user.username)
    return "数据查找成功"

四种查询方式

all 返回一个QuerySet
fittler 等同于sql中的where,返回的一个过滤后的QuerySet
exclude 回一个新的QuerySet,它包含不满足查询参数的对象
get 只有一个对象满足你的查询,也就是查询必须且只有一个返回符合的查询语句

三种获取数据方式

  • 第一种all
    all相当于查询所有字段的返回,select * from 表
    返回的Queryset类型,Queryset中包含的是表每一行返回的对象
  • 第二种values
    values相当于select 字段 from 表 返回的Queryset类型,Queryset中包含的是每一行数据字典的形式返回k代值字段,v代值数据
  • 第三种-values_list
    相当于select 字段 from 表 返回的Queryset类型,Queryset中包含的是每一行数据元组的形式返回字段数据

其他查询方式

返回QuerySet对象的

order_by() 用来进行升序降序排列使用,默认升序,加-降序
distinct() 去重和values搭配使用

不返回对象的

count *当我们只想查询 返回的条数的时候我们应该用count 比用first 要好,但当我们想要第一个返回的对象的时候我们可以用first
first/last

queryset中支持链式操作book=Book.objects.all().order_by(’-nid’).first()

模糊查询常用的操作

__gt 大于>
__gte 大于等于>=
__lt 小于<
__lte 小于等于<=
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含,忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__in 查询年龄在某一范围的学生Student.objects.filter(age__in=[10, 20, 30])
is null / is not null: __isnull 判空

4.修改数据

@app.route("/user/update")
def update_user():
    users = User.query.filter_by(username="张").first()
    # 相当于在会话当中已经完成修改操作,不需要db.session
    users.password = "9999"
    db.session.commit()
    return "数据修改成功"

5.删除数据

首先查找到对象,然后将从会话中删除,最后同步到数据库中

@app.route("/user/delete")
def delete_user():
    # 1.查找
    user = User.query.get(1)
    # 2.删除
    db.session.delete(user)
    # 3.将db。session中的修改,同步到数据库中
    db.session.commit()
    return "删除成功"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask框架种使用ORM模型对MySQL数据库的管理 的相关文章

  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非
  • mysql中的按位移位

    如何在 MySQL 中进行按位移位 有没有具体的指令或者操作符 如果不是 如何最佳地模拟它 看一下按位运算符MySQL first http dev mysql com doc refman 5 0 en bit functions htm
  • 是否可以在MYSQL中动态选择列名,其中列名是N个已知值中的1?

    我担心答案会是直接的 不 但我想知道是否可以在 MySQL 中执行如下操作 SELECT title label name FROM table 即选择单个列 可以称为title label or name from table 原因是 查
  • MYSQL 查询 WHERE IN 与 OR

    我开发了一个使用 OR 查询的系统 SELECT FROM tableA JOIN tableB ON idA idB WHERE idA 1 OR idA 2 OR idA 3 OR idA 4 OR idA 5 OR idA 100 与
  • 列是存在的,但是当我尝试删除它时,它说 MYSQL 中没有列? **错误代码:1091。无法删除...**

    我尝试运行以下查询 ALTER TABLE ORDER DETAIL DROP foreign key USER ID It says Error Code 1091 Can t DROP USER ID check that column
  • 如何在php中正确显示另一种语言的mysql表数据

    我有一个 mySQL 表 其中一列中的数据采用英语以外的语言 波斯语 当我在表中输入数据时 它会正确显示 但是当我想在 php 文件中显示数据时 它会显示如下 好吧 我应该怎么做才能以正确的形式显示数据 由于我经常使用 非英语 字符 因此要
  • PHP MySQL 查询带有 %s 和 %d

    SELECT COUNT AS test FROM s WHERE id d AND tmp mail lt gt 什么是 s and d for 这些是使用的格式符号 例如经过sprintf 例子 Output SELECT COUNT
  • 从所有表中选择

    我的数据库中有很多表都具有相同的结构 我想从所有表中进行选择 而不必像这样列出所有表 SELECT name FROM table1 table2 table3 table4 我尝试过 但这不起作用 SELECT name FROM 有没有
  • 烧瓶 - 404 未找到

    我是烧瓶开发的新手 这是我在烧瓶中的第一个程序 但它向我显示了这个错误 在服务器上找不到请求的 URL 如果您输入了网址 请手动检查拼写并重试 这是我的代码 from flask import Flask app Flask name ap
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • MySQL 将 ÅäÖ 视为 AAO?

    这两个查询给了我完全相同的结果 select from topics where name Harligt select from topics where name H rligt 这怎么可能 看起来mysql在搜索时会将 翻译成aao
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • WHERE 条件基于 PK 的查询是否建议使用“LIMIT 1”?

    我正在查询 mySQL 数据库以检索 1 个特定行的数据 我使用表主键作为 WHERE 约束参数 E g SELECT name FROM users WHERE userid 4 userid 列是表的主键 在 mySQL 语句末尾使用
  • 如何解决 注意:未定义索引:第 21 行 C:\xampp\htdocs\invmgt\manufactured_goods\change.php 中的 id [重复]

    这个问题在这里已经有答案了 我的 PHP 代码有一个问题 显示 注意 未定义的索引 我确信它非常简单 因为我是初学者 所以我不太清楚到底出了什么问题 所以请帮助我 这是代码
  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • IN 子查询中的 GROUP_CONCAT

    SELECT A id A title FROM table as A WHERE A active 1 AND A id IN SELECT GROUP CONCAT B id from B where user 3 如果我启动子查询SE
  • MySQL 复制是双向的

    我们已经成功设置了 MySQL 文献中描述的主从复制 不过 我很好奇是否有人设置了双向复制 例如 如果安装了 Drupal 或 Wordpress 第一个 主 数据库服务器出现故障 第二个 从属 数据库服务器恢复正常 与此同时 用户不断进行
  • 有没有办法在 MySQL 中有效地对 TRUNCATE 或 DROP TABLE 进行 GRANT ?

    我最近在 MySQL 5 5 x 中尝试过 GRANT SELECT INSERT UPDATE DELETE TRUNCATE ON crawler TO my user localhost WITH GRANT OPTION 这会导致错
  • 使用 SERVER_NAME 时出现 Flask 404

    在我的 Flask 配置中 我将 SERVER NAME 设置为 app example com 之类的域 我这样做是因为我需要使用url for with external网址 如果未设置 SERVER NAME Flask 会认为服务器

随机推荐

  • 【通讯录--动态实现】

    目录 前言 一 功能设置 声明结构体 1 初始化 2 释放空间 3 添加联系人 4 删除联系人 5 查找联系人 6 修改联系人 7 显示联系人 8 清空联系人 9 排序联系人 二 整体代码 1
  • js的三种使用方式(行内js、内部js、外部js)

    1 行内js js不单独写出
  • 远程VirtualBox上的Linux虚拟机

    项目场景 为了能够隔离实验环境 在VirtualBox上安装了Centos7用来专门跑实验 却发现无法远程 关闭防火墙和SELinux 1 关闭防火墙 2 关闭SELinux getenforce 命令查看是否开启 若为 Enfocing
  • ERP系统设计:库存管理怎么做?

    库存是企业打算出售给客户以获取利润的商品或材料 库存管理是供应链的一个关键要素 涉及到从制造商到仓库 从这些设施到销售点的库存跟踪 库存管理的目标是在适当的时间将适当的产品放置在适当的地点 库存管理的业务问题 在进行库存管理工作时 会出现很
  • 基于Python的大数据分析基础(一)

    关于Pandas Pandas中的数据结构 1 Series 一维数组系列 也称序列 2 DataFrame 二维的表格型数据结构 3 Panel 三维数组 数据类型 1 Logical 逻辑型 2 Numeric 数值型 3 Charac
  • NodeJS简介-node.js是什么?

    Nodejs是个在服务器动可以解析和执行JavaScript代码的运行环境 也可以说是一个运行时平台 仍然使用JavaScript作为开发语言 但是提偶了一些功能性的API 例如文件操作和网络通信API等 Nodejs是由 Ryan Dah
  • ssh key authentication失败,查看日志是selinux禁止了sshd读取authorized_keys文件

    ssh key authentication失败 查看日志是selinux禁止了sshd读取authorized keys文件 May 5 04 24 36 localhost dbus 704 system Activating serv
  • C#的变迁史 - C# 4.0 之线程安全集合篇

    作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题 解决临界资源的访问通常是加锁或者是使用信号量 这个大家应该很熟悉了 而集合作为一种重要的临界资源 通用性更广 为了让大家更安全的使用它们 微软为我们带来了强大的并行集合 Syste
  • 基于堆叠⾃编码器的时间序列预测 深层神经网络

    自适应迭代扩展卡尔曼滤波算法 AIEK 是一种滤波算法 其目的是通过迭代过程来逐渐适应不同的状态和环境 从而优化滤波效果 该算法的基本思路是在每一步迭代过程中 根据所观测的数据和状态方程 对滤波器的参数进行自适应调整 以便更好地拟合实际数据
  • python- NameError name ‘name‘ is not defined

    python NameError name name is not defined 练习写python函数的时候 遇到了NameError name name is not defined 这样的错误 百度了一下 发现name是一个系统变量
  • Selenium+Python系列 - 开发环境搭建

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 设计模式:代理模式

    由于某些原因需要给某对象提供一个代理以控制对该对象的访问 这时 访问对象不适合或者不能直接引用目标对象 代理对象作为访问对象和目标对象之间的中介 这就是代理模式 代理模式的主要优点有 1 代理模式在客户端与目标对象之间起到一个中介作用和保护
  • QT学习:制作树形列表菜单

    一 前言 使用QT制作树形的列表菜单 需要使用QTreeWidget和QTreeWidget两个类 最终效果如图所示 二 代码方式实现 使用代码方式实现树形菜单 首先要包含两个类库 include
  • 安全测试目录内容合集

    基础知识 安全测试基础知识 安全测试 django防御安全策略 HTTP工作原理 靶场DVWA 安全测试网站 DWVA下载安装启动 DVWA Command Injection DVWA 5 File upload 文件上传漏洞 DVWA
  • 【记录】安装Django 创建虚拟环境和新项目

    本文仅记录实际操作情况 本文参考书籍 1 2 1 确保电脑安装Python 2 创建虚拟环境 创建一个新目录test blog 再在终端中切换到这个目录 并执行如下命令创建一个虚拟环境 python m venv ll env 书上原文 这
  • 如何恢复内存卡数据?

    生活中 无论我们使用哪种存储设备 内部空间都是有限的 随着使用时间的增加 里面存储的数据会越来越多 这时如果不能及时处理 将很容易出现数据丢失 如果小伙伴们不小心碰到这样的事 要如何恢复内存卡数据呢 遇到了请不要着急 下面小编就分享可以有效
  • python读取表格画散点图_Note: Python_Matplotlib绘制平滑曲线和散点图

    给出横坐标纵坐标点 即可连线绘图 import matplotlib 调用绘图工具包 给出x y点坐标 x y 1 2 3 4 5 6 5 9 3 4 7 5 绘图 matplotlib pyplot plot x y 这样使用工具包如果程
  • python发邮件附件内容中文乱码_python3发邮件,附件名称为中文时出错

    问题描述 我写了一个发邮件的类 一切进行的很顺利 但是附件名改成中文的时候就出问题了 问题出现的环境背景及自己尝试过哪些方法 用的是python3 和email包 是了MIMEText MIMEApplication MIMEBase都不行
  • java scope_spring中的scope详解

    1 singleton 单一实例 此取值时表明容器中创建时只存在一个实例 所有引用此bean都是单一实例 如同每个国家都有一个总统 国家的所有人共用此总统 而这个国家就是一个spring容器 总统就是spring创建的类的bean 国家中的
  • Flask框架种使用ORM模型对MySQL数据库的管理

    通过flask连接MySQL数据库后 使用ORM模型对数据库管理 ORM模型的优点 使用 ORM 做数据库的开发可以有效的减少重复SQL语句的概率 写出来的模型也更加直观 清晰 支持多个关系数据库引擎 包括流行的 MySQL Postgre