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

SQLAlchemy 2.0简单使用

SQLAlchemy 2.0相比1.x进行了很大的更新,目前网上的教程不多,以下以链接mysql为例介绍一下基本的使用方法

环境及依赖

Python:3.8
mysql:8.3
Flask:3.0.3
SQLAlchemy:2.0.37
PyMySQL:1.1.1

使用步骤

1、创建引擎,链接到mysql

engine = create_engine('mysql+pymysql://{username}:{password}@{ip}:3306/{database_name}', echo=True)

以上的变量替换成自己的即可,比如你需要连接本地的test_db数据库,用户名为root,密码为123456,那么写法就是:

engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test_db', echo=True)

echo参数的作用是开启sql输出,以便调试

2、打开数据库链接会话

session = sessionmaker(engine)

3、保证线程安全

db_session = scoped_session(session)

db_session对象在保证线程安全的同时也封装了常用的数据库操作,方便使用

4、获取基类

Base = declarative_base()

5、创建数据库映射对象类

假设当前有一个数据库表名为user,表结构如下:
在这里插入图片描述

class User(Base):__table__ = Table('user', Base.metadata, =engine)

autoload_with开启表结构的自动反射加载

测试

至此准备工作已经全完成,下面使用flask框架写一个简单的登录接口来测试

import jsonfrom flask import Flask, request
from sqlalchemy import create_engine, Table
from sqlalchemy.orm import sessionmaker, scoped_session, declarative_baseapp = Flask(__name__)# 创建一个引擎,链接到mysql
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test_db', echo=True)
# 打开数据库链接会话
session = sessionmaker(engine)
# 保证线程安全
db_session = scoped_session(session)
# 获取基类
Base = declarative_base()class User(Base):__table__ = Table('user', Base.metadata, autoload_with=engine)@app.route('/', methods=['POST'])
def login():# 取到json请求数据request_data = json.loads(request.data)username = request_data['username']password = request_data['password']# 根据username、password查询数据库中是否有匹配对象result = db_session.query(User).filter_by(username=username, password=password).first()if result is None:return "登录失败"return "登录成功"if __name__ == '__main__':app.run()

运行当前项目

 * Serving Flask app 'main'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:5000

向接口发送请求
在这里插入图片描述

成功取到数据,登录成功:

2025-01-31 23:03:09,852 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2025-01-31 23:03:09,855 INFO sqlalchemy.engine.Engine SELECT user.user_id AS user_user_id, user.username AS user_username, user.password AS user_password, user.nickname AS user_nickname, user.picture AS user_picture, user.create_time AS user_create_time, user.update_time AS user_update_time, user.job AS user_job 
FROM user 
WHERE user.username = %(username_1)s AND user.password = %(password_1)s LIMIT %(param_1)s
2025-01-31 23:03:09,855 INFO sqlalchemy.engine.Engine [generated in 0.00022s] {'username_1': '黎震南', 'password_1': '62927', 'param_1': 1}
127.0.0.1 - - [31/Jan/2025 23:03:09] "POST / HTTP/1.1" 200 -
http://www.xdnf.cn/news/16154.html

相关文章:

  • Linux 使用 screen 窗口会话稳定挂载jar包到后台运行
  • 初识opencv01——基本api操作
  • 解决pip指令超时问题
  • Android AppCompat:实现Material Design向后兼容的终极指南
  • TTL+日志的MDC实现简易链路追踪
  • 【Java SE】Object类
  • 高并发场景下的缓存问题与一致性解决方案(技术方案总结)
  • day059-zabbix自定义监控与自动发现
  • 哔哩哔哩视觉算法面试30问全景精解
  • 【Pytorch】数据集的加载和处理(一)
  • 从效率瓶颈到自动化:火语言 RPA 在日常工作中的技术实践
  • (Arxiv-2025)HiDream-I1:一种高效图像生成基础模型,采用稀疏扩散Transformer
  • Android Surface创建流程
  • CSS自适应布局实战指南
  • Selenium+Java 自动化测试入门到实践:从环境搭建到元素操作
  • TIM定时中断
  • 一些Avalonia与WPF内容的对应关系和不同用法
  • Java从入门到精通!第十一天(Java常见的数据结构)
  • 数据库设计mysql篇
  • 嵌入式学习-土堆目标检测(3)-day27
  • 【iOS】SideTable
  • 【深度解析】从AWS re_Invent 2025看云原生技术发展趋势
  • C语言(20250722)
  • 网络编程---TCP协议
  • 跨越语言壁垒!ZKmall开源商城多语言架构如何支撑电商全球化布局
  • libgmp库(GNU高精度算术库)介绍
  • mac实现sudo命切换node版本
  • netty的编解码器,以及内置的编解码器
  • OpenCV 零基础到项目实战 | DAY 1:图像基础与核心操作
  • LLC协议