Flask与Mysql的连接以及在Flask中对数据库进行增删改查
- python解释器:3.8.3版本
- flask==2.2.2版本
- flask_sqlalchemy=3.1.1
- flask_migrate==4.0.7
1.创建文件并且配置
-
创建一个大文件
-
在该文件中进行创建static(静态),templates(动态文件),app.py文件
-
将大文件移到vscode软件中(pycharm一样的操作),我这就以vscode来进行操作
-
app.py文件进行配置
from flask import Flask
app=Flask(__name__)@app.route('/')
def hello_world():return 'Hello World'
if __name__=="__main__":app.run(debug=True) #进入Debug模式,修改自动刷新网页(方便)
2.flask与Mysql数据库进行连接以及检测是否连接成功
-
在Mysql中创建一个数据库,命名为flask
-
在app.py中对mysql进行配置
1.下载模块:
pip install flask_sqlalchemy==3.1.1
#MysQL所在的主机号 HOSTNAME="127.0.0.1" #MYSQL的端口号,默认为3306 PORT=3306 #连接mysql的用户名,读者用自己设置的 USERNAME='root' #连接mysql的密码 PASSWORD='你的数据库的密码'#例子:PASSWORD='xxx' #mysql上创建的数据库的名字 DATEBASE='flask'app.config['SQLALCHEMY_DATABASE_URI']=f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATEBASE}?charset=utf8' #导入模块 from flask_sqlalchemy import SQLAlchemy #使用SQLAlchemy创建一个db对象,SQLAlchemy会自动读取app.config中连接数据库的信息 db=SQLAlchemy(app)
-
检验数据库是否连接成功
#测试代码 #导入模块 import sqlalchemy with app.app_context():with db.engine.connect() as conn:rs=conn.execute(sqlalchemy.text('select 1'))print(rs.fetchone()) #打印结果为(1,)证明连接成功
-
运行结果如下:
3.创建一个类对象User以及将属性添加到数据库中
-
创建一个类User
#创建模型:User 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.Strg(100),nullable=False)
-
将属性映射到数据库的两种方法
-
第一种方法:不推荐(如果在添加属性的话,通过这个方法,他不会不这个属性也添加进去)
数据库结果:
没运行之前是这样子的:
运行app.py之后:
点击之后结果如下:
-
第二种方法:推荐
下载模块:pip install flask_mirgrate
==4.0.7
-
#导入模块
from flask_migrate import Migrate
migrate=Migrate(app,db)
'''
ORM模型映射成表的三步:1.flask db init:这步只需要执行一次2. flask db migrate :识别ORM模型的改变,生成迁移脚本3.flask db upgrade:运行迁移脚本
'''
我们先在User里面添加一个属性 :email,方便看出效果.
- 根据上面的ORM模型三部曲在终端运行,首先在vscode中输入快捷键:
ctrl+
`。- 输入:
flask db init
- 输入:
-
输入:
flask db migrate
-
最后一步:
flask db upgrade
备注:如果是第一种方法,这里是添加不上的。
4.在flask中进行数据库的 增删改查
-
增操作(普通)
#在flask库中将数据添加到数据库中 @app.route('/user/add') def add_user():#实例对象user=User(username='soul',password='python')#将ORM对象添加到db.session中db.session.add(user)#将db.session中的改变同步到数据库中区db.session.commit()#这里必须要return一个数据,要不然会报错return '用户添加成功'
-
增操作(改善)
#导入模块 from flask import request @app.route('/blog/add') def user_add():username=request.args.get('username',default='李四',type=str)password=request.args.get('password',default='xjs1314',type=str)email=request.args.get('email',default='admin@qq.com',type=str)print(username,password)#创建一个ORM对象user=User(username=username,password=password,email=email)#将ORM对象添加到db.session中db.session.add(user)#将db.session中的改变同步到数据库中区db.session.commit()#必须return一个数据,要不然会报错return '用户添加成功'
-
删操作
#删操作 @app.route('/user/delete/') def delete_user():#1.查找user=User.query.get(2)#删除id=2的数据#2.删除数据db.session.delete(user)#3.提交数据同步到数据库db.session.commit()return f'删除成功'
-
修改操作
#修改数据 @app.route('/user/update') def update_user():#查找数据user=User.query.filter_by(password='python').first()#获取第一个#2.修改数据user.password='1314'#不需要添加,直接提交db.session.commit()return '修改成功'
-
查找操作
#查询数据 @app.route('/user/query') def query_user():#1.get查找:根据主键查找user=User.query.get(1)#通过主键id查找,这是一个实例对象,就是上面的User面向对象的实例print(user)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 '查找成功'
5.总结
app.py里面的所有代码如下:
from flask import Flask
app=Flask(__name__)@app.route('/')
def hello_world():return 'Hello World'#MysQL所在的主机号
HOSTNAME="127.0.0.1"
#MYSQL的端口号,默认为3306
PORT=3306
#连接mysql的用户名,读者用自己设置的
USERNAME='root'
#连接mysql的密码
PASSWORD='xjs13149420'
#mysql上创建的数据库的名字
DATEBASE='flask'
#在app.config中设置好连接数据库的信息
app.config['SQLALCHEMY_DATABASE_URI']=f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATEBASE}?charset=utf8'
#导入模块
from flask_sqlalchemy import SQLAlchemy
#使用SQLAlchemy创建一个db对象,SQLAlchemy会自动读取app.config中连接数据库的信息
db=SQLAlchemy(app)#测试代码
#导入模块
# import sqlalchemy
# with app.app_context():
# with db.engine.connect() as conn:
# rs=conn.execute(sqlalchemy.text('select 1'))
# print(rs.fetchone()) #打印结果为(1,)证明连接成功#创建模型:User
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)email=db.Column(db.String(100))#导入模块
from flask_migrate import Migrate
migrate=Migrate(app,db)
'''
ORM模型映射成表的三步:1.flask db init:这步只需要执行一次2. flask db migrate :识别ORM模型的改变,生成迁移脚本3.flask db upgrade:运行迁移脚本'''# #在flask库中将数据添加到数据库中
# @app.route('/user/add')
# def add_user():
# #实例对象
# user=User(username='soul',password='python')
# #将ORM对象添加到db.session中
# db.session.add(user)
# #将db.session中的改变同步到数据库中区
# db.session.commit()
# #这里必须要return一个数据,要不然会报错
# return '用户添加成功'#第二种添加方法
#导入模块
from flask import request
@app.route('/user/add')
def user_add():username=request.args.get('username',default='李四',type=str)password=request.args.get('password',default='xjs1314',type=str)email=request.args.get('email',default='admin@qq.com',type=str)print(username,password)#创建一个ORM对象user=User(username=username,password=password,email=email)#将ORM对象添加到db.session中db.session.add(user)#将db.session中的改变同步到数据库中区db.session.commit()#必须return一个数据,要不然会报错return '用户添加成功'#删操作
@app.route('/user/delete/')
def delete_user():#1.查找user=User.query.get(2)#删除id=2的数据#2.删除数据db.session.delete(user)#3.提交数据同步到数据库db.session.commit()return f'删除成功'#修改数据
@app.route('/user/update')
def update_user():#查找数据user=User.query.filter_by(password='python').first()#获取第一个#2.修改数据user.password='1314'#不需要添加,直接提交db.session.commit()return '修改成功'#查找操作
#查询数据
@app.route('/user/query')
def query_user():#1.get查找:根据主键查找user=User.query.get(1)#通过主键id查找,这是一个实例对象,就是上面的User面向对象的实例print(user)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 '查找成功'
with app.app_context():db.create_all()
if __name__=="__main__":app.run(debug=True)