[Flask]数据库的连接和操作

news/2025/1/12 6:48:25/

一、安装连接程序

        在控制台中使用语句 pip install pymysql 即可安装

        同时为了使用ORM对数据库进行操作(而非sql语句),还需要安装SQLAlchemy

pip install flask-sqlalchemy

二、使用Navicat管理数据库

         安装Navicat软件,本体需要收费,可自行搜索DLC,这里就不展示了。

navivathttp://www.navicat.com.cn/        安装并装载DLC后,按如下步骤进行连接

         连接服务器后选择服务器,按下右键找到新建数据库进行数据库的创建

         编码方式选择utf8mb4(utf8的增强版)

三、连接mysql服务器

        导入SqlAlchemy包依赖

from flask_sqlalchemy import SQLAlchemy

        构建sql对象,需要导入app对象(链接参数在app.config中)

HostName="127.0.0.1"
Port = 3306                     #默认为3306,需要自行修改
UserName="root"                 #默认用户名
Password="admin"
DataBase="database_learn"app.config['SQLALCHEMY_DATABASE_URI']=f"mysql+pymysql://{UserName}:{Password}@{HostName}:{Port}/{DataBase}?charset=utf8mb4"db = SQLAlchemy(app)            #创建db对象
#----测试连接是否成功----#
with app.app_context():         #解决上下文问题with db.engine.connect() as conn:rs = conn.execute("select 1")print(rs.fetchone())

四、ORM模型和表的映射

        一个数据模型与数据库中的一张表对应,这里以创建一个User数据表为例:

class User(db.Model):__tablename__="user"                    #表名id = db.Column(db.Integer,primary_key=True,autoincrement=True) #主键-- autoincrement为序号自动增长username = db.Column(db.String(100),nullable=False)             #不能为空password = db.Column(db.String(100),nullable=False)

        然后可以使用db.create_all()将其同步到数据库中

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

五、ORM模型与增删改查

        ①添加数据

        需要执行以下两步:1.将数据添加到session中;2.commit数据

@app.route('/user/add')
def add_user():user = User(username="张三",password='123123')db.session.add(user)db.session.commit()return "创建成功"

        ②查询数据

        有两种查询方法:get查询和filter_by查询,区别在于

                get是根据主键查询单个对象,需要知道主键(id)

                filter_by会根据查询条件返回所有符合要求的对象(需要进行遍历处理)

@app.route('/user/query')
def query_user():# 1-get查找(仅根据主键查找--单个查找)user = User.query.get(1)print(f"{user.id}:{user.username}:{user.password}")# 2-filter_by查找(查找所有符合条件的数据)users = User.query.filter_by(username='张三')for user in users:      #返回结果为列表,需要进行遍历print(f"{user.id}:{user.username}:{user.password}")return "查找成功"

                此外,还可以使用以下代码(虽然应该用得不多)

User.query.all()    #查找所有数据
User.query.first()  #查找第一个数据
User.query.order_by()    #按照指定字段排序
User.query.group_by()    #按照指定字段分组
User.query.ofsset(x)    #跳过前x条数据
User.query.limit(x)    #对结果数量进行限制
User.query.slice(start,stop)    #对结果进行切片

        ③修改数据

@app.route('/user/update')
def update_user():user = User.query.filter_by(username='张三').first()user.password='123456'db.session.commit() #同步数据return "修改成功"#多对象修改users = User.query.filter_by(username='张三')for user in users:      #返回结果为列表,需要进行遍历user.password='456456'

        ④删除数据

@app.route('/user/delete')
def delete_user():user = User.query.get(1)db.session.delete(user)db.session.commit()return "删除成功"

六、ORM表关系的实现(外键)

        ①构建外键关系

        在ORM模型中,外键通过db.ForeignKey实现

#----外键实现----#
class Article(db.Model):__tablename__="article"                    #表名id = db.Column(db.Integer,primary_key=True,autoincrement=True) #主键-- autoincrement为序号自动增长title = db.Column(db.String(200),nullable=False)content = db.Column(db.Text,nullable=False)#----外键--作者author_id = db.Column(db.Interge,db.ForeignKey("user.id"))

        其次,可以通过db.relationship建立联系使得ORM能直接访问外键

    author = db.relationship('User',backref="articles")#自动寻找对应的外键表(包含反向引用)

        这里需要注意的是,引用的时候与类名匹配而不是与表名匹配。反向引用则要填写你想要的参数,在主类中使用该参数进行访问

        ②对外键表进行添加

@app.route('/user/add_book')
def add_book():article1 = Article(title="名字不够长还好意思叫轻小说?",content="????")article2 = Article(title="名字不够长还好意思叫轻小说?",content="????")article.author= User.query.get(2)   #绑定外键db.session.add_all([article1,article2])db.session.commit()return "创建成功"

        ③查找外键表

@app.route('/user/find_book')
def find_book():user = User.query.get(2)for article in user.articles:    #反向应用的外键类名print(article.title)return "查找成功"

七、使用ORM更改数据库结构

        需要额外安装flask-migrate插件

pip install flask-migrate

        添加引用

from flask_migrate import Migrate

        创建Migrate对象

migrate = Migrate(app,db)

        使用此方法会将程序中的ORM模型迁移到数据库中(自动识别更改),所有操作均在控制台下执行,一般分为以下三步:

                1.初始化(生成迁移配置文件)

flask db init

                2.生成迁移脚本

flask db migrate

                3.迁移数据

flask db upgrade

        执行完成后会额外生成一个数据表(用于记录迁移脚本的版本号,不需要人为操作)


http://www.ppmy.cn/news/6888.html

相关文章

《计算机网络》——第一章知识点

考试题型: 选择题填空题判断题简答题计算题ISP:因特网服务提供者/因特网服务提供商,是一个向广大用户综合提供互联网接入业务、信息业务、和增值业务的公司,如中国电信、中国联动、中国移动等。分为主干ISP、地区ISP和本地ISP。 计算机网络∶利用通信线…

手把手教你玩转 Excel 数据透视表

1. 什么是数据透视表 数据透视表是一种可以快速汇总、分析大量数据表格的交互式分析工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视,并建立交叉表格,用以查看数据表格不同层面的汇总信息、分析结果以及摘要数据。 使用数据透视表…

智慧物联网无线协同代理技术解决方案: 边缘协同感知(EICS)技术解密

无线协同代理技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策,属于蓝奥声核心技术–边缘协同感知(EICS)技术的关键支撑性技术之一。该项技术涉及物联网边缘域的无线通信技术领域,具体主要涉及网络服务节点与目标对象设备…

学习Python中turtle模块的基本用法(6:其它函数)

除了之前文章中介绍的turtle模块的绘图函数,本文从turtle帮助文档中梳理了其它绘图或状态函数,编写复杂的绘图函数时也用得到,函数清单如下表所示: 序号函数名称说明1turtle.home返回初始坐标 (0,0),并设置朝向为初始…

景联文科技2D3D融合标注案例分享|数据标注

在自动驾驶场景中,激光雷达生成的点云数据可用于测量物体的形状和轮廓,并估算出周围物体的位置和速度,但由于激光雷达生成的点云数据缺少RGB数据中存在的纹理和颜色信息,无法精确地识别出路上的汽车、行人、障碍物、信号灯等。而2…

[DonkeyCar][树莓派]基础01 - 首次配置 - WIFI

2022年圣诞节到来啦,疫情把刚刚起来的工作似乎又慢了下来,在冲刺决赛圈的同时,也许开一个新的领域,写一个博客是比较好的方式。 一、前言 拿到树莓派开发板的时候,一般,供应商都会配合烧录的镜像。但是&am…

jQuery库冲突

文章目录jQuery库冲突原因jQuery.noConflict()如还想使用$可以这么做jQuery库冲突 原因 在某些情况下,可能有必要在同一个页面中使用多个JavaScript库。但是很多库都使用了“$”这个符号(因为它简短方便),这时就需要用一种方式来…

volantis使用php实现Gitee友链

介绍 本文使用Gitee实现Volantis主题友链功能,其中友链使用的是site标签,因为该标签可以展示图片,如 {% sites repo:example.json api:https://example.dearxuan.com %} 友链api的最终路径为 api “版本” repo,如上面代码的最…