flask 数据库操作入门教程(一把梭)
flask 数据库操作入门
安装数据库
mysql8.0 下载后一直点击下一步,设置好root密码
安装模块
pip install flask_sqlalchemy
连接数据库
还需要自己创建一个数据库可以使用navicat图形化创建也可以使用命令创建。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text# 设置一个对象名为app, 用于传输一些数据库连接的一些配置信息。
# 在app.config 中设置数据库连接的信息
app = Flask(__name__)# 连接数据库的一些配置
# 连接数据库的地址
HOSTNAME = "127.0.0.1"
# 连接数据库的端口
PORT = 3306
# 连接数据库的账号名
USERNAME = "root"
# 连接数据库的密码,这里用自己的密码,我这里用root
PASSWORD = "root"
# 设置连接数据库的数据库名
DATABASE = "database_learn"# 默认连接mysql数据库的语句 使用SQLALCHEMY
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"# 设置一个数据库对象, 使用SQLAlchemy会创建一个db对象,然后sqlalchemy会自动读取app.config 中的连接信息。
db = SQLAlchemy(app)# flask上下文问题,不然会报错
# ctrl + / 多行注释和多行取消注释
with app.app_context():with db.engine.connect() as conn:rs = conn.execute(text("select 1"))print(rs.fetchone())# 测试数据库连接代码,只是测试连接代码# 如果正常输出(1,) sql语句正常执行,数据库连接没有问题
数据库增删改查
增加数据库
@app.route("/user/add")
def add_user():# 创建ORM对象user = User(username="菜鸡学安全", password="111111")user1 = User(username="张三", password="444444")user2 = User(username="李四", password="555555")user3 = User(username="王五", password="666666")# db.session进行操作db.session.add(user4)db.session.add(user1)db.session.add(user2)db.session.add(user3)# 同步到数据库中db.session.commit()return "用户已添加成功"
查询数据库
@app.route("/user/query")
def query_user():# 1, get查找:根据主键查找# user = User.query.get(1)# print(f"{user.id}:{user.username}---{user.password}")# return "数据查找成功!"#2, filter_by查找users = User.query.filter_by(username="菜鸡学安全")# 类似于数组的操作,query对象print(type(users))for user in users:print(user.username)print(user.password)return "数据查找成功!"
get查询
filter查询
修改数据
# 修改数据
@app.route("/user/updata")
def updata_user():user = User.query.filter_by(username="菜鸡学安全").first()user.password = "222222"db.session.commit()return "数据修改成功!"
修改数据成功
删除数据
@app.route("/user/delete")
def delete_user():# 1. 查找user = User.query.get(3)# 2, 从db.session中删除db.session.delete(user)# 3, 同步到数据库中db.session.commit()return "数据删除成功!"
删除数据成功
完整代码
app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text# 设置一个对象名为app, 用于传输一些数据库连接的一些配置信息。
# 在app.config 中设置数据库连接的信息
app = Flask(__name__)# 连接数据库的一些配置
# 连接数据库的地址
HOSTNAME = "127.0.0.1"
# 连接数据库的端口
PORT = 3306
# 连接数据库的账号名
USERNAME = "root"
# 连接数据库的密码,这里用自己的密码,我这里用root
PASSWORD = "root"
# 设置连接数据库的数据库名
DATABASE = "database_learn"# 默认连接mysql数据库的语句 使用SQLALCHEMY
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"# 设置一个数据库对象, 使用SQLAlchemy会创建一个db对象,然后sqlalchemy会自动读取app.config 中的连接信息。
db = SQLAlchemy(app)# flask上下文问题,不然会报错
# ctrl + / 多行注释和多行取消注释
# with app.app_context():
# with db.engine.connect() as conn:
# rs = conn.execute(text("select 1"))
# print(rs.fetchone())# 测试数据库连接代码,只是测试连接代码# 如果正常输出(1,) sql语句正常执行,数据库连接没有问题# 对象关系映射(object: relationship mapping),是用面向对象的方式来操作数据,大大提高开发效率。
# 提高安全性,底层代码对sql注入做了一些防护。 灵魂性强,支持所有关系型数据库。
# 一个ORM模型对应一张表,一个属性对应的是这张表的一个字段。class User(db.Model):__tablename__ = "user"# 表中的一个字段的定义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)# user = User(username="菜鸡学安全", password="111111")
# sql: insert user(username,password) values('菜鸡学安全', '111111');# 同步至数据库
with app.app_context():db.create_all()@app.route('/')
def hello_world(): # put application's code herereturn 'Hello World!'# 增加数据
@app.route("/user/add")
def add_user():# 创建ORM对象user = User(username="菜鸡学安全", password="111111")user1 = User(username="张三", password="444444")user2 = User(username="李四", password="555555")user3 = User(username="王五", password="666666")# db.session进行操作db.session.add(user4)db.session.add(user1)db.session.add(user2)db.session.add(user3)# 同步到数据库中db.session.commit()return "用户已添加成功"# 查询
@app.route("/user/query")
def query_user():# 1, get查找:根据主键查找# user = User.query.get(1)# print(f"{user.id}:{user.username}---{user.password}")# return "数据查找成功!"#2, filter_by查找users = User.query.filter_by(username="菜鸡学安全")# 类似于数组的操作,query对象print(type(users))for user in users:print(user.username)print(user.password)return "数据查找成功!"# 修改数据
@app.route("/user/updata")
def updata_user():user = User.query.filter_by(username="菜鸡学安全").first()user.password = "222222"db.session.commit()return "数据修改成功!"# 删除数据
@app.route("/user/delete")
def delete_user():# 1. 查找user = User.query.get(3)# 2, 从db.session中删除db.session.delete(user)# 3, 同步到数据库中db.session.commit()return "数据删除成功!"if __name__ == '__main__':app.run()
参考链接
https://www.bilibili.com/video/BV17r4y1y7jJ/
flask 数据库操作入门教程(一把梭)相关推荐
- 前端 IndexDB 操作入门教程
前端 IndexDB 操作入门教程 idb-js 基于indexdb本地数据库的封装 文档地址 安装: npm install idb-js --save 使用: 第一步: 引入Idb import ...
- C语言与数据库操作入门
https://blog.csdn.net/flyingqd/article/details/78763652 C语言与数据库操作入门(Win版) 2017年12月10日 17:30:17 阅读数:1 ...
- Mysql数据库基础入门教程
Mysql数据库基础入门教程 课程链接:https://www.bilibili.com/video/BV1Qb411x7Yc?p=1 2022/1/22start 一.数据库简介 1.什么是数据库? ...
- 数据库快速入门教程--视频
数据库快速入门教程--视频 下载地址:http://v.51work6.com/courseInfoRedirect.do?action=courseInfo&courseId=240579 ...
- cad怎么向下位移,CAD基础操作入门教程,CAD怎么按坐标位移来移动对象的方法
CAD基础操作入门教程,CAD怎么按坐标位移来移动对象的方法 CAD绘图操作无疑是比较考验软件操作熟练以及创意设计思维的过程,作为cad设计师,软件熟练是基础也是根本,而创意思维是升华,关系着你的后期 ...
- C语言与数据库操作入门(Win版)
数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的,既使你不会Windows API,只要参照本文的方法,写数据库应用程序,你也行.本文以MySq ...
- MySQL数据库新手入门教程
相信很多做数据分析的朋友都发现,在平时做业务分析中,Excel表格是我们使用最频繁的工具.我们还发现,Excel虽然好用,但一旦数据量大了起来,比如处理二三十万条或以上数据量的时候,就会出现卡顿,甚至 ...
- android dbflow教程,Android高性能ORM数据库DBFlow入门教程
一.引入依赖.初始化 需要引入apt和maven,配置项目的 build.gradle buildscript { repositories { jcenter() } dependencies { ...
- Android Room 数据库最佳入门教程
引言 本文章旨在记录学习Android JetPack库下的Room数据库的使用,不作过于深入原理的讲解,如有问题和建议请留言讨论. 1.Room 库概念及架构示意图 概念 Google的介绍: ...
最新文章
- perl开发环境配置(Database,SOCKET,CISCO)j(ReShip)
- Andorid中的HAL
- python【蓝桥杯vip练习题库】ALGO-86矩阵乘法(枚举)
- SQL Server 审核(Audit)-- 创建服务器级别的审核
- html自动轮播中间放大,html5+css如何实现中间大两头小的轮播效果
- 小白的markdown基础语法总结
- 【Python②】python之首秀
- tcp拥塞控制_网络TCP的拥塞控制算法简介
- tar打包时排除一些文件或者目录
- 发送附件时,防止文件名中的中文字符变成乱码
- win10+Vmware+centeros10连接xshell和xftp
- [Qt]用QItemDelegate的来修改QStandardItem字体颜色
- java整理软件--- Java OCR 图像智能字符识别技术,可识别中文,但是验证码不可以识别...已测识别中文效果很好
- Microsoft MVC Preview 2 ActionFilterAttribute实际开发中的应用
- Open3d之点云顶点法线估计
- python itemgetter_Python operator.itemgetter
- LeetCode解题思路—循环排序与原地翻转链表(思维导图)
- 互联网未来十年发展趋势
- 企业微信最全17种获客+4种自动转化玩法
- spring boot启动报错: The APR based Apache Tomcat Native library which allows optimal performance