[python flask 数据库ORM操作]

一、链接数据库

我们选择的框架是flask-sqlAlchemy 这个框架是对pymysql的封装。
连接数据库

#导入包
from flask_sqlalchemy import SQLAlchemy
#创建flask app对象
app = Flask(__name__)
#设置配置信息
HOSTNAME = "localhost"
PORT = 3306;
USERNAME = "root";
PASSWORD = "密码xxxxx";
DATABASE = "flask_test";
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8";

#这里自动读取的配置就是SQLALCHEMY_DATABASE_URI这个配置。--利用配置创建数据库对象
db = SQLAlchemy(app)

这里就已经脸上数据库了

二、创建表

这里是继承db.Model这个类上的方法等。

class User(db.Model):
    __tablename__ = "User";
    id = db.Column(db.Integer,primary_key = True,autoincrement = True);   #主键id 自增常
    # varchar
    username = db.Column(db.String(32),nullable = False);
    password = db.Column(db.String(128),nullable = False);
    create_time = db.Column(db.DateTime);
    def __repr__(self):     #设置输出打印格式
       return "<Role:%s,%s>" % (self.id, self.username)

三、数据库表的增删改查操作

三步:
1、首先在python中先创建好相关对象。 --前面已经创建了数据库表类
2、将ORM对象添加到db.session会话中,这个数据库中你打开的一个文件也是一个会话。
3、将db.session中的改变同步到数据库中。

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

根据id删除,也是要先拿到数据记录再删除

@app.route('/user/delete')
def delete_user():
    # 1. 查找
    user = User.query.get(1)
    # 2. 从db.session中删除
    db.session.delete(user)
    # 3. 将会话中的修改保存到数据库中
    db.session.commit();
    return "数据删除成功";

先拿到再改

@app.route("/user/update")
def update_user():
    user = User.query.filter_by(username = "法外狂徒张三").first();
    user.password = "22222";
    db.session.commit();
    return "数据修改成功";

@app.route("/user/query")
def query_user():
    # 1. get查找:根据主键查找
    user = User.query.get(1)
    # 2. filter_by查找
    # Query
    users = User.query.filter_by(username = "法外狂徒张三”)
    for user in users:
        print(user.username);

    return "数据查找成功";

数据库中的查有许多操作,下面例举一下
在这里插入图片描述

四、外键

1、创建外键 — 建表的时候,告知某个字段对应其余表的哪个字段。例如:

author_id = db.Column(db.Integer, db.ForeignKey("User.id"));

2、两个字段相互联系:
方法一:backref

#Article表中的字段author
author = db.relationship("User", backref="articles”)    #这句话说明它需要对应User表中的字段articles,这时不需要再User表中进行补充代码

方法二:back_populates

#Article表中的字段author
author = db.relationship("User",back_populates = "articles”)
#User表中的字段articles
articles = db.relationship("Article", back_populates = "author")

将两个表联系起来。

五、ORM对象的migrate迁移

首先,问题是,为什么需要利用flask-migrate进行对象迁移?
Answer: 原始方案中的db.create_all() 不能够实现表创建完成之后的字段的增加和修改。

#原始方案
with app.app_context():
    db.create_all()

因此要使用migrate框架来实现python中和数据库中的ORM对象的同步:

初始化迁移环境: 
flask db init 
在项目中创建一个migrate目录,用于存放迁移脚本

生成迁移脚本 
flask db migrate 
这个命令会比较你的模型定义和当前数据库的状态,生成一个迁移脚本

应用迁移 
flask db upgrade
这个命令执行脚本,从而在数据库中创建或更新表结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/896685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在C++中比大小

关于min()函数和max()函数: min()、max()这两个函数如果需要使用&#xff0c;要在程序头文件中加上<algorithm>库就可以使用这个函数了 #include <algorithm>min()函数是比较数中哪一个数最小&#xff0c;就返回最小的数&#xff0c;而max()函数则是比较数中哪一个…

计算机毕业设计Flask+Vue.js空气质量预测 空气质量可视化 空气质量分析 空气质量爬虫 大数据毕业设计 Hadoop Spark

《FlaskVue.js空气质量预测与可视化系统》开题报告与任务书 一、研究背景与意义 随着工业化进程的加速和城市化水平的不断提高&#xff0c;空气质量问题日益成为全球关注的焦点。空气污染不仅严重影响着人们的身体健康&#xff0c;如增加呼吸系统疾病、心血管疾病等风险&…

商场楼宇室内导航系统

商场楼宇室内导航系统 本文所涉及所有资源均在传知代码平台可获取 文章目录 商场楼宇室内导航系统效果图导航效果图查看信息数据加载加载模型模型选型处理楼层模型绑定店铺创建店铺名称动态显示隐藏2d元素空气墙查看信息楼梯导航效果图 导航效果图 查看信息 数据加载 因为是一…

Java最全面试题->Java主流框架->Srping面试题

Spring面试题 下边是我自己整理的面试题,基本已经很全面了,想要的可以私信我,我会不定期去更新思维导图 哪里不会点哪里 谈谈你对 Spring 的理解? Spring 是一个开源框架,为简化企业级应用开发而生。Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。…

定时开关机功能实现

提示&#xff1a;本文仅仅针对MTK平台实现需求&#xff0c;对其它芯片主控平台暂无借鉴可言 文章目录 需求需求描述实际手机功能图 资料相关说明实现方案修改方案修改内容点内置App修改MtkAlarmManagerService.java 坑点解决总结 需求 实现手机一样的定时开关机功能 需求描述…

计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践

本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 今天给大家介绍下百度沧海存储团队在数据湖加速方面的工作进展情况。 数据湖这个概念&#xff0c;从 2012 年产生到现在已经有十余年的时间&#xff0c;每家公司对它内涵的解读都不太一样。但是数据湖的主要存储底座…

具备哪些特质的内外网文件交换系统 才是高科技企业需要的?

高科技企业是指涉及对国家产生深远和积极影响的先进技术的产业集群&#xff0c;它们以持续的创新和高研发投入为核心&#xff0c;推动科技进步和产业升级。高科技企业是市场经济的重要组成&#xff0c;为经济发展和技术进步提供充足动力&#xff0c;因此&#xff0c;高科技企业…

【南开X上海交大】OPUS:效率显著提升的OCC网络

1. 摘要 占据预测任务旨在预测体素化的3D环境中的占据状态&#xff0c;在自动驾驶领域中迅速获得了关注。主流的占据预测方法首先将3D环境离散化为体素网格&#xff0c;然后在这些密集网格上执行分类。然而&#xff0c;样本数据分析显示&#xff0c;大多数体素实际上是未占据的…

《15分钟轻松学Go》教程目录

在AI快速发展的时代&#xff0c;学习Go语言依然很有用。Go语言擅长处理高并发任务&#xff0c;也就是说可以同时处理很多请求&#xff0c;这对于需要快速响应的AI服务非常重要。另外&#xff0c;Go适合用来处理和传输大量数据&#xff0c;非常适合机器学习模型的数据预处理。 …

并查集 --- Java通用模版

什么是并查集 并查集可以解决什么问题&#xff1a;判断两个节点是否在一个集合&#xff0c;也可以将两个节点添加到一个集合中。 并查集常用于处理大规模数据下的元素分组问题&#xff0c;特别是在数据量极大时&#xff0c;使用正常的数据结构可能会导致空间或时间复杂度过高…

2024年10月21日计算机网络,乌蒙第一部分

【互联网数据传输原理 &#xff5c;OSI七层网络参考模型】 https://www.bilibili.com/video/BV1EU4y1v7ju/?share_sourcecopy_web&vd_source476fcb3b552dae37b7e82015a682a972 mac地址相当于是名字&#xff0c;ip地址相当于是住址&#xff0c;端口相当于是发送的东西拿什…

推荐一款功能强大的数据备份工具:Iperius Backup Full

Iperius Backup是一款非常灵活而且功能强大的数据备份工具&#xff0c;程序可以非常好的保护您的文件和数据的安全。支持DAT备份、LTO备份、NAS备份、磁带备份、RDX驱动器、USB备份、并且支持zip压缩和军事级别的AES 256位数据加密技术! 主要特色 云备份 Iperius可以自动地发…

STM32F1+HAL库+FreeTOTS学习18——任务通知

STM32F1HAL库FreeTOTS学习18——任务通知 1. 任务通知1.1 任务通知的引入1.2 任务通知简介1.3 任务通知的优缺点 2. 任务相关API函数2.1 发送任务通知2.1.1 xTaskGenericNotify()2.1.2 xTaskNotifyGive()和xTaskNotifyGiveIndexed()2.1.2 xTaskNotify()和xTaskNotifyIndexed()2…

【LeetCode:910. 最小差值 II + 模拟 + 思维】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

低功耗4G模组的小秘密:RSA算法示例驾到,通通闪开...

在实际应用中&#xff0c;低功耗4G模组的RSA算法示例具有重要的价值&#xff0c;所以今天我们学习合宙低功耗4G模组Air780EP_LuatOS_rsa示例&#xff1a; 1.简介 RSA算法的安全性基于&#xff1a;将两个大质数相乘很容易&#xff0c;但是想要将其乘积分解成原始的质数因子却非…

微信小程序广告组件被驳回之后怎么重新提交广告组件?

有时候遇到广告组件被退回的问题 这时需要重新提交一次程序代码&#xff0c;然后提交审核然后发布新版本之后&#xff0c;找到广告管理&#xff0c;即可看到广告组件是在正在审核状态中

CANoe_数据回放功能功能介绍_时间段(区间)选择

CANoe的日志回放功能&#xff0c;可以选择时间段回放&#xff0c;这样可以在数据量很大的时候快速定位分析数据问题点 CANoe日志回放功能概述 CANoe的日志回放功能允许用户重现和分析已记录的CAN总线或其他网络总线数据。这些日志文件通常以CANoe自己的日志格式&#xff08;.b…

C#学习笔记(一)

C#学习笔记&#xff08;一&#xff09; 简介第一章 上位机开发环境之 VS 使用和.NET 平台基础一、安装软件二、创建项目三、第一个Hello world四、解决方案与项目五、Debug 和 Release 的区别六、代码的生产过程七、CLR的其它功能 简介 C# .NET工控上位机开发 在工控领域&…

【AI 大模型】智能时代的核心驱动力

1. 引言&#x1f4dc;1.1 AI大模型的崛起与影响力&#x1f31f;1.2 本文的研究目的与结构&#x1f9d0; 2. AI大模型的基础概念与技术原理&#x1f4da;2.1 定义与核心特征&#x1f3af;2.2 深度学习架构基础&#x1f9e0;2.3 大规模数据训练的重要性&#x1f4ca;2.4 模型优化…

15分钟学Go 实战项目一:命令行工具

实战项目一&#xff1a;命令行工具 1. 引言 命令行工具是开发者常用的工具之一&#xff0c;它可以帮助用户通过命令行界面对程序进行控制和交互。在这节中&#xff0c;我们将创建一个简单的命令行工具&#xff0c;以帮助你理解Go语言的基本语法和如何处理命令行输入。在这个过…