SQLAlchemy 2.0簡單使用

記錄一下SQLAlchemy 2.0連接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.pswp.cn/pingmian/90619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90619.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何創建或查看具有 repo 權限的 GitHub 個人訪問令牌(PAT)

要創建或查看具有 repo 權限的 GitHub 個人訪問令牌(PAT),請按照以下步驟操作: 一、生成具有 repo 權限的 PAT 登錄 GitHub 訪問 GitHub 官網,使用你的賬戶登錄。 進入開發者設置 點擊右上角頭像,選擇 Settings(設置) → 左側菜單中選擇 Developer settings(開發者設…

【AI時代速通QT】第五節:Qt Creator如何引入第三方庫,以OpenCV為例

目錄 引言 一、第一步:萬事開頭難 - 準備工作 1.1 獲取并“安裝”OpenCV 1.2 創建一個新的Qt項目 1.3 建立專業的項目目錄結構 二、第二步:核心操作 - 配置.pro文件 2.1 方式一:圖形化向導(適合初次體驗) 2.2 …

使用Clion開發STM32(Dap調試)

使用Clion開發STM32環境配置ST-Link無法下載OpenOCDST-Link調試Dap-Link調試Debug配置查看寄存器值之前寫了一篇文章關于如何用VSCode配合EIDE插件開發STM32 最近研究了如何使用Clion開發STM32 環境配置 使用Clion開發STM32需要用到4個工具:Clion、STM32CubeMX、…

人工智能-python-OpenCV 中 `release()` 和 `destroy()` 的區別

文章目錄OpenCV 中 release() 和 destroy() 的區別1. release()常見使用場景:代碼示例:作用:2. destroy()常見使用場景:代碼示例:作用:3. 總結:4. 何時使用小結:OpenCV 中 release()…

[RPA] 日期時間練習案例

案例1根據日期拆分表格根據表格中不同日期,創建多個對應日期名稱的Sheet頁(名稱格式為"yyyy-mm-dd"),并將同一日期的訂單拷貝至對應Sheet頁日期時間練習題1.xlsx流程搭建:實現效果:

2025.7.27文獻閱讀-基于深度神經網絡的半變異函數在高程數據普通克里金插值中的應用

2025.7.27周報一、文獻閱讀題目信息摘要創新點實驗一、半變異函數擬合二、普通克里金插值三、結果對比分析四、實驗結果結論不足以及展望一、文獻閱讀 題目信息 題目: Application of a semivariogram based on a deep neural network to Ordinary Kriging interp…

用unity開發教學輔助軟件---幼兒繪本英語拼讀

記錄完整項目的制作,借鑒了大佬被代碼折磨的狗子 “unity創建《找不同》游戲 圖片編輯器”一文。 (建議通過目錄閱讀本文哦~) 項目演示: 幼兒英語教輔幼兒英語繪本教學游戲整體架構 游戲開發中設計的整體框架 游戲的總體功能框架…

《Java 程序設計》第 5 章 - 數組詳解

引言在 Java 編程中,數組是一種基礎且重要的數據結構,它允許我們將多個相同類型的元素存儲在一個連續的內存空間中,通過索引快速訪問。掌握數組的使用是學習 Java 集合框架、算法等高級知識的基礎。本章將從數組的創建、使用開始,…

基于Spring Boot的可盈保險合同管理系統的設計與實現(源碼+論文)

一、相關技術 技術/工具描述SSM框架在JavaWeb開發中,SSM框架(Spring Spring MVC MyBatis)是流行的選擇。它既沒有SSH框架的臃腫,也沒有SpringMVC的簡化,屬于中間級別,更靈活且易于編寫和理解。MyBatis框…

??XSLT:XML轉換的“魔法棒”?

大家好!今天我們來聊聊 ??XSLT??(Extensible Stylesheet Language Transformations),一種用于轉換和呈現XML文檔的神奇工具。如果你曾需要將一堆枯燥的XML數據變成精美的HTML網頁、PDF報告,或其他XML格式&#xff…

面試實戰,問題十,如何保證系統在超過設計訪問量時仍能正常運行,怎么回答

如何保證系統在超過設計訪問量時仍能正常運行 在Java面試中,當被問及如何保證系統在訪問量激增(例如從100萬用戶增長到200萬)時仍能穩定運行,這是一個考察高并發、可擴展性和容錯能力的關鍵問題。核心在于通過架構設計、性能優化和…

DMDSC安裝部署教程

一、環境準備 虛擬機準備,添加共享磁盤 (1)共享存儲規劃 裸設備名 容量 用途 /dev/sdb 10 G /dev/asmdata0(數據磁盤) /dev/sdc 5 G /dev/asmdcr(DCR 磁盤) /dev/sdd 5 G /dev/asm…

半導體 CIM(計算機集成制造)系統

半導體CIM(Computer Integrated Manufacturing,計算機集成制造)系統是半導體制造的“神經中樞”,通過整合硬件設備、軟件系統和數據流轉,實現從訂單到成品的全流程自動化、信息化和智能化管理。其工作流程高度貼合半導…

AI是否會終結IT職業?深度剖析IT行業的“涌現”與重構

引言:一場不可回避的技術審判在ChatGPT、Copilot、Claude、Sora 等AI技術密集爆發的今天,IT行業首當其沖地感受到這股浪潮帶來的“智力替代壓力”。尤其是以開發、測試、運維、分析為主的崗位,逐漸被AI所“滲透”。于是,問題擺在每…

mid360連接機載電腦,遠程桌面連接不上的情況

為什么會出現這種情況呢,一開始我以為是雷達使用的網線,使用的是和網絡同樣的口,是因為機載電腦帶寬不足,所以導致的,但是后面發現不管是哪一個機載電腦都會斷開連接,后面了解得知,并不是連接的…

目標檢測系列(六)labelstudio實現自動化標注

一、啟用圖片文件服務用Nginx啟用圖片服務,配置好映射路徑。新建圖片文件夾,將文件夾下的圖片路徑存儲到txt文件中訪問地址(文件夾):http://112.12.19.122:8081/urls/ml-backend-test/進入labelstudio將txt文件路徑填入…

從零開始大模型之編碼注意力機制

從零開始大模型之編碼注意力機制1 長序列建模中的問題2 使用注意力機制捕捉數據依賴關系3 自注意力機制4 實現帶可訓練權重的自注意力機制5 利用因果注意力隱藏未來詞匯6 將單頭注意力擴展到多頭注意力7 Pytorch附錄7.1 torch.nn.Linear多頭掩碼可訓練權重的注意力機制。為什么…

小架構step系列26:Spring提供的validator

1 概述對于Web服務,需要對請求的參數進行校驗,可以對不合法的參數進行提示,提高用戶體驗。也可以防止有人惡意用一些非法的參數對網站造成破壞。如果是對每個參數都寫一段代碼來判斷值是否合法,那校驗的代碼就很多,也很…

0編程基礎:用TRAE寫出了會蹦跳躲避散發炫光的貪吃蛇小游戲

在某個深夜的代碼深淵里,一個從未寫過print("Hello World")的小白開發者,竟用自然語言指令讓貪吃蛇跳起了"光棱華爾茲"——蛇身折射出彩虹軌跡,食物像星艦般自動規避追擊,甚至實現了四頭蛇的"量子糾纏式…

在Word和WPS文字中要同時查看和編輯一個文檔的兩個地方?拆分窗口

如果要在Word或WPS文字的長文檔中同時查看兩部同步的地方(文檔位置),來回跳轉和滾動費時費力,使用拆分窗口的功能即可搞定。將窗口一分為二,上下對照非常方便。一、拆分窗口的路徑Word和WPS基本一樣,就是菜…