当前位置: 首页 > article >正文

4.flask-SQLAlchemy,表Model定义、增删查改操作

介绍

SQLAlchemy是对数据库的一个抽象

开发者不用直接与SQL语句打交道

Python对象来操作数据库

SQLAlchemy是一个关系型数据库

安装

flask中SQLAlchemy的配置

from flask import Flask
from demo.user_oper import user


def create_app():
    app = Flask(__name__)
    # 使用session,就必须设置app.secret_key的值
    app.secret_key = "1"
    app.register_blueprint(user, url_prefix="/web")

    # Flask数据库设置
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@localhost:3308/mp'
    # 动态追踪修改设置,如未设置只会提示警告,不建议开启
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    # 查询时显示原始SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    return app

创建SQLAlchemy的db对象

from middle_aware import create_app
from flask_sqlalchemy import SQLAlchemy

app = create_app()

db = SQLAlchemy()

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8080)

定义db.Model

db.ForeignKey(表名.字段名)  --表示外键

from exts import db


# 数据库模块需要继承db.Model
class User(db.Model):
    # 定义表名
    __tablename__ = "user"
    # 定义字段
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(100))
    info = db.Column(db.JSON)


class Address(db.Model):
    # 定义表名
    __tablename__ = "address"
    # 定义字段
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    city = db.Column(db.String(10))

db.session会话管理

在SQLAlchemy中插入、修改、删除操作,均由数据库会话管理。

会话用db.session表示。在准备把数据写入数据库前,要现将数据添加到会话中,然后调用commit()方法提交会话。

db.session.add(user)        添加到数据库的session中。

db.session.add_all([user1, user2])        添加多个信息到session中。

db.session.commit()        提交数据库的修改

db.session.rollback()        数据库的回滚操作

db.session.delete(user)        删除数据库,需要commit。

删除数据库中所有表结构,重新根据Model中的定义创建新的表结构

db.create_all()        可以根据定义的Model创建表,在给定的数据库中。

db.drop_all()        删除数据库中所有的表。

from flask import Flask
import config
from exts import db
from demo.views.user_oper2 import user2
from demo.user_oper import user

app = Flask(__name__)
# 绑定配置文件
app.config.from_object(config)
app = Flask(__name__)
# 使用session,就必须设置app.secret_key的值
app.secret_key = "1"
app.register_blueprint(user, url_prefix="/web")
app.register_blueprint(user2, url_prefix="/test")

# Flask数据库设置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3308/python_db?charset=utf8'
# 动态追踪修改设置,如未设置只会提示警告,不建议开启
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 查询时显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True

db.init_app(app)

if __name__ == '__main__':
    # 一定要在Flask 应用上下文的环境中调用了这个方法
    with app.app_context():
        # 删除所有表
        db.drop_all()
        # 根据model文件中定义的表结构创建表
        db.create_all()
    app.run(host="0.0.0.0", port=8080)

数据类型定义

db.session.add_all([user1, user2])   批量添加数据

@user2.route("/addBatch", methods=['GET'])
def add_batch_user():
    num = range(5)
    user_list = []
    for i in num:
        user_list.append(User(username='xkj{}'.format(i), password="111111", info={'info':'test'}))
    db.session.add_all(user_list)
    db.session.commit()
    return "success"

用户表添加一条记录后,提交事务,产生唯一标识,可直接取出传入下一个地址表中,建立关联关系

@user2.route("/add_user_address", methods=['GET'])
def add_user_address():
    user = User(username='小蘑菇', password='123', info={"info": "xxx"})
    db.session.add(user)
    db.session.commit()
    # 提交事务后,新增的用户,就能获取到用户的主键id
    address = Address(user_id=user.id, city="成都")
    db.session.add(address)
    db.session.commit()
    return "success"
# 打印出所有蓝图的接口访问地址
print(app.url_map)

修改表数据操作

@user2.route("/upd_user", methods=['GET'])
def upd_user():
    update_user = db.session.query(User).filter(User.id == 1).first()
    if update_user:
        update_user.username = '大王'
    db.session.commit()
    return "update success"

删除数据库表中数据的操作

@user2.route("/del_user", methods=['GET'])
def del_user():
    update_user = db.session.query(User).filter(User.id == 1).first()
    if update_user:
        db.session.delete(update_user)
        db.session.commit()
    return "delete user"

http://www.kler.cn/a/520517.html

相关文章:

  • 基于OSAL的嵌入式裸机事件驱动框架——整体架构调度机制
  • Windows本地部署(DeepSeek-R1-Distill-Qwen-1.5B)模型
  • 【Leetcode刷题记录】15.三数之和
  • TCP/IP 协议:互联网通信的基石
  • SQL基础、函数、约束(MySQL第二期)
  • Linux查看服务器的内外网地址
  • 2000-2020年各省第三产业增加值占GDP比重数据
  • 深入MapReduce——MRv1设计
  • 应用层协议 HTTP 讲解实战:从0实现HTTP 服务器
  • Kubectl 与 Helm 详解
  • 《DeepSeek R1:大模型的安装与部署全攻略》
  • 2024年度总结——理想的风,吹进现实
  • 移动光猫怎么自己改桥接模式?
  • Linux——网络(udp)
  • 非根目录部署 nextjs 项目,资源文件 请求404 的问题
  • windows蓝牙驱动开发-查询蓝牙接口
  • 在Windows系统中本地部署属于自己的大语言模型(Ollama + open-webui + deepseek-r1)
  • python3+TensorFlow 2.x(四)反向传播
  • 使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南
  • UE骨骼模拟物理
  • 【Python】类
  • QT:tftp client 和 Server
  • 查找地理处理工具
  • Scrapy如何设置iP,并实现IP重用, IP代理池重用
  • python3+TensorFlow 2.x(三)手写数字识别
  • PostgreSQL数据库的运行机制和架构体系