flask中ORM的使用

2023-11-07

目录

1.ORM是什么

2.flask-sqlalchemy介绍及安装:

3.设计数据库模型并创建表 

4.使用ORM插入,修改,删除数据

5.使用ORM查询数据并展示


1.ORM是什么:对象关系的映射

       它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。

那什么是SQL:

SQL是存取数据以及查询、更新和管理关系数据库系统。

2.flask-sqlalchemy介绍及安装:

  安装:     pip install -U Flask-SQLALchemy

  源码安装: python setup.py install

  安装依赖: pip install mysqlclient

3.设计数据库模型并创建表 

(1).flask-sqlalchemy配置:

数据库URI:  SQLALCHEMY_DATABASE_URI

(数据库URI它是统一资源标识符是一个用于标识某一互联网资源名称的字符串)

MySQL数据库URI参数格式:

        mysql://scott:tiger@localhost/mtdatatabase

        mysql:数据库类型

        scott:tiger@localhost:用户名/密码/ip

        mtdatatabase:MySQL数据库名称       

引入:

from  flask-sqlalchemy import  SQLAIchemy

(2).绑定到Flask对象:

db = SQLAIchemy(app)

(3).ORM模型创建:

class User(db.Model):

        id = db.Column(db.Integer, primary_key=True)

        primary_key=True  是主键的意思

(4).指定表的名称:

__tablename__ == 'haha_user'

 (5).手动创建数据库:

创建表:db.create_all(bind='db1')

(6).删除表:

db.drop_all()

 (7).ORM模型字段类型支持

Integer/Float   整数/浮点数
String (size)    有长度限制的字符串
Text    一些较长的文本(如:文章详情/商品详情)
DateTime  表示为python  datetime 对象的 时间和日期
Boolean  存储布尔值
Pckle Type  储存一个持久化的Python对象
LargeBinary  储存一个任意大的二进制数据

 (8).数据库模型设计:

一对多关系,外键关联:

就好比一个客户他有很多个收货地址,客户与地址之间的关系就叫一对多的关系

addresses = db.relationship('UserAddress',backref=address',lazy=True)

user = db.relationship('User', backref=db.backref('address', lazt=True))

他不会在表格里面显示一行,就是为了反向引用方便。

想要关联哪个表的什么数据用db.Foreignkey('表的名称'.数据)

4.使用ORM插入,修改,删除数据

新增/修改数据

1.构造ORM模型对象

user = User('admin',admin@example.com)

2.添加到db.session(备注:可添多个对象)

db.session.add(user)

3.提交到数据库

db.session.commit()

 物理删除数据:

查询ORM模型对象

user = User.query.filter_by(username='zhangsan').first()

添加到db.session

db.session.delete(user)

提交到数据库:

db.session.commit()

5.使用ORM查询数据并展示

返回结果(list)

查询所有的数据:User.query.all()

按条件查询:  User.query_filter_by(username='zahngsan')

                        User.query.filter(User.nickname.endswith('三’).all()

排序: User.query.order_by(User.username)

查询TOP 10  User.query.limit(10).all()

 返回单个ORM对象:

根据pk查询: User.query.get(1) 

获取第一条记录: User.query.first() 

多表关联查询: db.session.query(User).join(Address)

                          User.query.join(Address)

分页:

方式一:使用offset 和 limit

                .offser(offset).limit(limit)

方式二使用paginate分页支持

                .paginate(page=2,per_page=4)  返回Pagination的对象

                查询用户信:User.query

has_prev/has_next 是否有上一页/下一页
item 当前页的数据列表
prev_num/next_num 上一页/下一页的页码
total 总记录数
page 当前页码
pages 总页数 

 分页操作的实际应用:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flask中ORM的使用 的相关文章

  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • Pandas set_levels,如何避免标签排序?

    我使用时遇到问题set levels多索引 from io import StringIO txt Name Height Age Metres A 1 25 B 95 1 df pd read csv StringIO txt heade
  • 计算另一个字符串中多个字符串的出现次数

    在 Python 2 7 中 给定以下字符串 Spot是一只棕色的狗 斑点有棕色的头发 斑点的头发是棕色的 查找字符串中 Spot brown 和 hair 总数的最佳方法是什么 在示例中 它将返回 8 我正在寻找类似的东西string c
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视

随机推荐

  • Java的多线程简单示例

    一 多线程示例 class Apple extends Thread String token public Apple String token 与类同名为构造方法 this token token public static void
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 十四、Git使用教程

    十四 Git使用教程 1 Git简介 2 Git安装 配置 2 1 Ubuntu 18 04 2 2 Windows 10 3 Git 基本操作 3 1 初始化本地库 3 2 查看本地库状态 3 3 将本地文件 添加到暂存区 3 4 将暂存
  • 2022年华为杯中国研究生数学建模竞赛

    2022年华为杯第十九届中国研究生数学建模竞赛结果已出 我已经放到了百度网盘链接 提供给大家 希望大家都能有满意的结果 链接 https pan baidu com s 1mi3aCwDQFCgNa7uSc5xGqA pwd q8b6 提取
  • 类与对象(3)

    目录 1 操作符重载 1 1 赋值运算符重载 1 2 操作符重载 1 3 操作符重载 1 4 lt 操作符重载 1 5 lt 操作符重载 1 6 gt 操作符 1 7 gt 操作符 1 8 前置 和后置 1 9 前置 和后置 2 编写一个D
  • SpringBoot - 配置文件加载位置与优先级

    1 项目内部配置文件 spring boot 启动会扫描以下位置的application properties或者application yml文件作为Spring boot的默认配置文件 file config file classpat
  • 解决element-ui消息提示$message重叠问题

    在进行表单校验的时候 当触发两个提示消息的时候会出现上面的叠加情况 没有将提示消息分开显示 这样就给用户造成不好的视觉效果 我们的预期效果是达到上面的显示效果 就是在进行提示的时候 如果叠加就需分开显示 解决方案 第一种解决方案 第二种解决
  • Hibernate 一级缓存源码级

    你是否遇到过这类情况 case 1 查询返回10条数据 其他程序修改数据 再次查询返回的数据并没有被修改 case 2 查询返回5条数据 修改已有5条数据的部分字段 并新增5条数据 再次查询 读取到10条数据 已被查询过的5条数据没有被更新
  • Python3中内置函数callable介绍

    Python3中的内置函数callable接受一个对象参数 如果此对象参数看起来可调用 则callable函数返回True 否则返回False 如果返回True 则调用仍有可能失败 但如果返回False 则调用对象将永远不会成功 类是可调用
  • Windows下如何确定用户创建时间

    1找到用户对应profile目录 在win7下一般在users目录下 看目录的创建时间就能知道用户的第一次登入时间 但是因为是第一次登入时间 如果账户创建后没有登入过 就不会有这个目录 而且如果登入时间一般也会晚于创建时间 比如当前使用帐号
  • RSA非对称加密使用方式与原理浅析

    一 非对称加密的简述 非对称加密 顾名思义加解密用的不是同一个密钥 如此我们也能很通俗的对照理解对称加密 显然它后者是加解密为同一个密钥 那么非对称加密就得用俩个密钥 一个叫公钥 任何人都能够去获取 一个叫私钥 不会四处乱传输 保留在一个认
  • tslib编译出错解决(gcc版本问题)

    交叉编译器 arm none linux gnu eabi 4 2 0 configure prefix opt tslib host arm linux ac cv func malloc 0 nonnull yes 之前报错 usr i
  • 【CCF- CSP 2022 6-01 归一化处理 满分题解】

    代码实现 include
  • 在Vue中调用微信的扫描二维码功能

    在Vue中调用微信的扫描二维码功能 步骤 新建vue文件 这里采用mint的标签库 就一个按钮 关键代码
  • 在pycharm中新建一个虚拟conda环境的步骤

    不用命令行 自己在创建新项目时手动创建新的conda虚拟环境 1 先在conda executable下选择conda exe 此执行文件在scripts下 系统一般自动默认此项 location 项目文件自动到anaconda的envs下
  • STM32第一天之GPIO寄存器与位带操作相关注意事项

    1 STM32存储器映射地址 2 常用到的基地址如下 3 系统框架结构 4 对于地址定义的时候需要加小括号保持整体性 片上外设基地址 2 define PERIPH BASE unsigned int 0x40000000 3 4 总线基地
  • ES7.17版本terms查询性能问题

    背景 1 对于7版本 大版本 集群希望只维护一个版本 最终选择7 17 对同大版本的7 5版本集群进行升级 2 根据官方描述 id放到堆外性能损失非常小可以忽略 且对BKD进行了优化 3 升级完成 一段时间之后 收到用户报障 4 抽样检查了
  • Android屏幕适配(使用ConstraintLayout),kotlin数组排序

    教程如下 1 拉两根横向参考线分别定在20 65 博主计算所得 2 然后拉一个imageView进入布局 选择自己要显示的图片 3 将此imageView的上下参照物设置为两参照线 并将左右参照物设置为父容器 将其宽设置为wrap cont
  • pyspark结合hive使用 spark on hive方式开发代码附上代码实例

    1 在CDH中已经添加了hive 2 配置hive中的hive site xml参数 opt cloudera parcels CDH lib hive conf hive site xml 3 配置spark中的hive site xml
  • flask中ORM的使用

    目录 1 ORM是什么 2 flask sqlalchemy介绍及安装 3 设计数据库模型并创建表 4 使用ORM插入 修改 删除数据 5 使用ORM查询数据并展示 1 ORM是什么 对象关系的映射 它的作用是在关系型数据库和对象之间作一个