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 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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值