欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 4.flask-SQLAlchemy,表Model定义、增删查改操作

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

2025/2/6 23:41:15 来源:https://blog.csdn.net/qq_36352889/article/details/145084405  浏览:    关键词:4.flask-SQLAlchemy,表Model定义、增删查改操作

介绍

SQLAlchemy是对数据库的一个抽象

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

Python对象来操作数据库

SQLAlchemy是一个关系型数据库

安装

flask中SQLAlchemy的配置

from flask import Flask
from demo.user_oper import userdef 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'] = Truereturn app

创建SQLAlchemy的db对象

from middle_aware import create_app
from flask_sqlalchemy import SQLAlchemyapp = 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 userapp = 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'] = Truedb.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()# 提交事务后,新增的用户,就能获取到用户的主键idaddress = 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"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com