【PythonWeb开发】Flask连接数据库以及执行数据迁移

一、连接数据库

        在Flask中可以使用 Flask-SQLAlchemy 扩展来连接数据库。如果你选择不同的数据库或 ORM,初始化和配置的方式可能会有所不同。下面给出三种常见数据库的连接示例:

(1)连接MySQL数据库

        使用Flask-SQLAlchemy即可实现对MySQL数据库的连接,但首先得安装相应的库

pip install flask-sqlalchemy pymysql

        Flask-SQLAlchemy是对原生的 SQLAlchemy的拓展,提供了一些方便的快捷方式和集成点,使它在 Flask 应用中更为常用。pymysql是MySQL的驱动,让Python操作MySQL数据库成为可能。

# exts.py中连接数据库要安装一些插件
"""
用于ORM:pip install flask-sqlalchemy用于数据迁移:pip install flask-migrate用于MySQL驱动:pip install pymysql
"""# 插件的使用方法可以总结成三步:# 1. 导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate# 2. 实例化插件对象
db = SQLAlchemy()
migrate = Migrate()# 3. 绑定app
def init_exts(app):db.init_app(app=app)  # 初始化数据库插件migrate.init_app(app=app, db=db)  # 初始化迁移插件,并关联数据库插件

在对应的子应用App文件夹里创建__init__.py文件。并配置数据库连接:

# 在__init__.py中导入Flask库
from flask import Flask
# 从当前目录下的views模块中导入blue对象
from .views import blue
# 从当前目录下面的exts模块中导入初始化插件函数
from .exts import init_exts# 定义一个创建应用的函数
def create_app():# 创建一个Flask应用实例app = Flask(__name__)# 注册蓝图,将blue对象注册到app上app.register_blueprint(blueprint=blue)# 设置数据库连接URIDB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)  # 这是连接MySQL数据库的设置# 将数据库连接URI配置到app的配置中app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI# 关闭SQLAlchemy的事件系统,提高性能app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False# 初始化插件init_exts(app)# 返回创建好的Flask应用实例return app

(2)连接SQLite数据库

        使用Flask-SQLAlchemy即可实现对SQLite数据库的连接,配置连接 SQLite 数据库非常简单:

from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
# 设置数据库连接URI
DB_URI = 'sqlite:///sqlite3.db'  # 要改这个地方'sqlite:///这是你数据库的名字.db'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
db = SQLAlchemy(app)

(3)连接MongoDB数据库

        安装 Flask-PyMongo 或 pymongo可以实现对MongoDB数据库的连接

pip install flask flask-pymongo pymongo

        首先导入了必要的Flask和pymongo库。然后,我们创建了一个Flask实例,并且配置了一个MONGO_URI配置项来定义MongoDB的连接字符串和数据库名。接下来,我们创建了一个MongoClient实例,用于与MongoDB交互。

from flask import Flask
from flask_pymongo import PyMongoapp = Flask(__name__)
DB_URI = 'mongodb://username:password@localhost:27017/myDatabase'
app.config['MONGO_URI'] = DB_URI
mongo = PyMongo(app)

        在实际应用中,替换 'username:password@localhost' 以及 'dbname''myDatabase' 等占位符为你的实际数据库凭据和名称。

        使用 mongo = PyMongo(app) 创建的 mongo 对象,可以非常方便地与 MongoDB 数据库进行交互。这个对象提供了很多方法来执行 CRUD 操作(创建 Create、读取 Read、更新 Update、删除 Delete)。下面是一些基本的使用示例:

① 访问集合

users = mongo.db.users

② 插入文档

# 创建一个新用户字典,包含用户名、电子邮件和加入时间
new_user = {"username": "Alice","email": "alice@example.com","joined_on": datetime.utcnow()
}# 将新用户插入到数据库的users集合中
insert_result = users.insert_one(new_user)# 打印插入操作的结果,显示新用户的ID
print(f"Inserted ID: {insert_result.inserted_id}")

③ 查询文档

# 查询所有用户
all_users = users.find()
for user in all_users:print(user)# 根据条件查询
user_by_email = users.find_one({"email": "alice@example.com"})
print(user_by_email)

④ 更新文档

# 更新一个文档,将email为"alice@example.com"的用户的username字段设置为"Alicia"
update_result = users.update_one({"email": "alice@example.com"},  # 查询条件:查找email为"alice@example.com"的用户{"$set": {"username": "Alicia"}}  # 更新操作:设置username字段为"Alicia"
)# 打印修改的文档数量
print(f"Modified count: {update_result.modified_count}")  # 输出修改的文档数量

⑤ 删除文档

# 删除用户名为"Alicia"的用户记录,并返回删除结果
delete_result = users.delete_one({"username": "Alicia"})# 打印删除的记录数
print(f"Deleted count: {delete_result.deleted_count}")

二、数据迁移

        在 Flask 中执行数据库迁移,通常会使用 Flask-Migrate 扩展,它是基于 Alembic 的一个简单包装器,用于处理数据库迁移。以下是如何使用 Flask-Migrate 执行数据迁移的基本步骤:

 (1)安装Flask-Migrate

pip install Flask-Migrate

(2)初始化Flask-Migrate

        以SQLite为例,在 Flask 应用中初始化Flask-Migrate

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrateapp = Flask(__name__)
URI = 'sqlite:///example.db'  # 请根据实际情况替换为你的数据库URI
app.config['SQLALCHEMY_DATABASE_URI'] = URI
db = SQLAlchemy(app)# 初始化 Flask-Migrate
migrate = Migrate(app, db)

(3)四条迁移命令

  • flask db init

        初始化迁移环境,这是第一次设置时需要执行的操作,它会在你的项目中创建一个迁移脚本的目录。

flask db init
  • flask db migrate

        生成迁移脚本,每当你的模型有变动时,都需要执行此命令来生成迁移脚本。

flask db migrate -m "Migration message describing the changes"

-m 参数后面跟着的是对此次迁移的简短描述,这将被用作迁移脚本的名称。 

  • flask db upgrade

应用迁移,使用此命令来应用实际的数据库变更。

flask db upgrade
  • flask db downgrade

如果你需要撤销最近的迁移,可以使用以下命令

flask db downgrade

        默认情况下,这会撤销最后一次迁移。如果你想回滚到更早的版本,可能需要指定回退到的具体版本号。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

民生银行收大额罚单:信用卡中心一同被罚,管理层如何施救?

民生银行的2024年,再添变故。 近日,国家金融监管总局宁波分局公布了数则行政处罚信息公开表。内容显示,民生银行(SH:600016、HK:01988)宁波分行、民生银行信用卡中心宁波分中心因多项违法违规事实,共计被处…

企业何时部署冗余链路预防网络故障

部署冗余链路保障企业网络的稳定性和可用性,是确保业务连续性的关键。然而,部署冗余链路(备线)确实会带来额外的成本。因此,企业必须在冗余链路的成本和潜在的业务中断损失之间做出权衡。 部署冗余链路的必要性 1. 当…

rust嵌入式,从svd到代码

在不使用embassy库的情况下, 这个嵌入式教学 讲的比较好. 大概思路就是 安装必要工具 probe-rs-tools , svd2rust下载svd 对于stm32 在这里: 官方svd根据工具生成自己的库自己再拉个库用上面的库. 问题是什么,坑太多,反正我跟着走了一遍,没通. 其实,2024年这套不用看了,图简…

JVM原理(八):JVM虚拟机工具之基础故障工具

这里主要介绍监视虚拟机运行状态和进行故障处理的工具 1. jsp:虚拟机进程状况工具 jsp命令格式: jsp [options] [hostid] jps远程查询虚拟机进程状态 2. jstat:虚拟机统计信息监视工具 jstat命令格式: jstat [option vmid [interval [s|ms] [count]…

antd vue a-select 下拉框模糊查询失效解决方法

我原以为这是一个简单的配置,写上就好了,没想到竟然无法搜索,原因是antd下拉框模糊搜索(show-search)是默认按照value字段来查询的,但是一般我们的都是需要按照label这个属性来查询的。简单点按照我下面标红…

LP-SCADA系统在智能制造中的作用是什么?

在企业思考如何提升产线自动化时,往往考虑到的都是从硬件设备下手,但其实作为“大脑”存在的软件系统更是必不可少,尤其是当产线中的自动化设备越来越多,产生的数据也越来越多,大量数据需要人工进行整理时,…

CSS全解析:从基础到实战,掌握每一个知识点

引言: CSS,全称为Cascading Style Sheets,即层叠样式表,是Web前端开发中不可或缺的一部分。它负责网页的样式设计,包括布局、颜色、字体等,使网页内容呈现出丰富多彩的视觉效果。本文将全面解析CSS的基础属…

python自动化办公之PyPDF2.errors.DeprecationError

背景:pypdf2库在不断更新换代里面的类,逐渐淘汰一些旧的类 PyPDF2.errors.DeprecationError的意思是我们代码里用到的类计划被淘汰了,系统不推荐使用,解决办法:根据提示use xxx instead使用xxx 替换之前的类 例子1 P…

论文阅读YOLO-World: Real-Time Open-Vocabulary Object Detection

核心: 开放词汇的实时的yolo检测器。重参数化的视觉语言聚合路径模块Re-parameterizable VisionLanguage Path Aggregation Network (RepVL-PAN)实时核心:轻量化的检测器离线词汇推理过程重参数化 方法 预训练方案:将实例注释重新定义为区域…

【24医学顶刊】GANDALF:主动学习 + 图注意力变换器 + 变分自编码器,改善多标签图像分类

GANDALF:主动学习 图注意力变换器 变分自编码器,改善多标签图像分类 提出背景子解法1:多标签信息样本的选择子解法2:生成信息丰富且非冗余的合成样本 例子:胸部X射线图像分析传统方法的操作和局限GaNDLF方法的优势 工…

超级会员卡积分收银系统小程序源码系统 前后端完整分离 带完整的安装代码包以及搭建教程

系统概述 超级会员卡积分收银系统小程序源码系统是专为各类商业场景设计的综合性平台。它旨在为商家提供一站式的解决方案,涵盖了会员管理、积分体系、收银操作以及数据统计等多个重要方面。 该系统的前后端分离架构确保了系统的灵活性和可扩展性。前端负责用户界…

如何用程序批量下载小红书的图片?

如何使用MediaCrawler快速下载图片 作为一名图像算法工程师,怎么能没有图片资源呢?今天,我要介绍一个能快速下载图片的方法,仅供学习使用,请勿用于其他用途。 下载项目 首先,从GitHub下载项目&#xff1…

强化学习的数学原理:贝尔曼公式

大纲 这一节课程的大纲: 重点 对于这次课,重点是两个东西: Motivating examples(为什么需要贝尔曼公式) 首先要明白,为什么 return 是重要的? 之前其实就说过,return 能够帮助我们评价一个策略是好还是坏…

uniapp使用 movable-area movable-view 实现按双指中心位置缩放及拖拽功能

原理 使用 transformOrigin: ${state.x}px ${state.y}px 0 重新设置偏移中心点 待解决问题 缩放后进行拖拽会使计算的中心点位置与双指中心位置存在偏差,如果网友有解决这个问题,请贴代码到我的评论区,谢谢。 直接贴出代码 这里有关pdf的…

LVGL实现字库的下载和使用

1 字库 字库的概念:相应文字或字符的合集。 点阵字库:按字库顺序排列的字符/汉字字模的合集。 LVGL中字库使用Unicode编码,Unicode 是全球文字统一编码。它把世界上的各种文字的每一个字符指定唯一编码,实现跨语种、跨平台的应…

深入学习 Kafka(3)- SpringBoot 整合 Kafka

1. 引入 jar <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>2. yml 配置 spring:kafka:bootstrap-servers: localhost:9092,localhost:9093,localhost:9094 # kafka 服…

大数据开发助手:Coze平台上一款致力于高效解决大数据开发问题的智能Bot!

大数据开发助手&#xff1a;Coze平台上一款致力于高效解决大数据开发问题的智能Bot 核心技术揭秘1. **自然语言处理&#xff08;NLP&#xff09;**2. **知识图谱构建**3. **个性化推荐算法** 功能特色概览1. **即时问题解答**2. **最佳实践分享**3. **个性化学习路径**4. **社区…

哪个牌子的超声波清洗器好?精选四大超强超声波清洗机力荐

生活中戴眼镜的人群不在少数&#xff0c;然而要维持眼镜的干净却不得不每次都需要清洗&#xff0c;只是通过手洗的方式实在太慢并且容易操作不当让镜片磨损更加严重&#xff01;所以超声波清洗机就诞生了&#xff01;超声波清洗机能够轻松清洗机眼镜上面的油脂污渍&#xff0c;…

使用Java构建可伸缩的云原生应用架构

使用Java构建可伸缩的云原生应用架构 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是云原生应用架构&#xff1f; 云原生应用架构是一种利用云计算平台…

synchronized 锁优化原理

目录 一、轻量级锁 二、锁膨胀 三、自旋优化 四、偏向锁 五、锁消除 一、轻量级锁 1. 会创建一个锁记录 Lock Record&#xff08;保存在线程栈中&#xff09;&#xff0c;尝试 CAS 修改 Mark Word 中的对象头&#xff0c;是一种乐观锁的思想&#xff0c;而不是将 Java 对…