目录
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='[email protected]',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='[email protected]',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)
标签:flask,改查,app,db,003,session,user,password
From: https://www.cnblogs.com/positive-boy/p/18343558