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 here
return '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/