Python操作MySQL數據庫的工具--sqlalchemy

文章目錄

  • 一、pymysql和sqlalchemy的區別
  • 二、sqlalchemy的詳細使用
    • 1.安裝庫
    • 2.核心思想
    • 3.整體思路
    • 4.sqlalchemy需要連接數據庫
    • 5.使用步驟
      • 1.手動提前創建數據庫
      • 2.使用代碼創建數據表
      • 3.用代碼操作數據表
        • 3.1 增加數據
        • 3.2 查詢數據
        • 3.3 刪除數據
        • 3.4 修改數據


一、pymysql和sqlalchemy的區別

pymysqlsqlalchemy都是Python用來操作數據庫的工具,兩者的區別如下:

  • pymysql庫在學校用的較多,也稱學者庫;sqlalchemy基本都是在企業應用,也稱企業庫;
  • pymysql庫使用sql語句操作數據庫,所以非常繁瑣,要求程序員要記憶大量sql語法;而sqlalchemy是采用操作對象的方式來操作數據庫,對程序員很友好,不必記憶較多sql語句用法;

綜上所述,推薦大家日后在實際開發中使用sqlalchemy庫。

二、sqlalchemy的詳細使用

1.安裝庫

安裝命令:pip install sqlalchemy

2.核心思想

用操作對象的方式去操作數據庫。

3.整體思路

借用sqlalchemy的基本框架
使用和豐富框架 ----- 滿足日常需求

4.sqlalchemy需要連接數據庫

連接數據庫的方法模版如下:

數據庫類型+數據庫驅動://用戶名:密碼@電腦IP:mysql端口號/自定義數據庫名?charset=utf8

示例如下:

mysql+pymysql://mysql賬號:mysql密碼@localhost:3306/數據庫名?charset=utf8

5.使用步驟

1.手動提前創建數據庫

打開Navicat工具,建立好連接之后,右鍵點擊連接名稱,在下拉列表中選擇【新建數據庫】。
在這里插入圖片描述

進來新建數據庫頁面之后,數據庫名字自己隨便起,注意:字符集要選擇utf8mb4,排序規則要選擇utf8mb4_general_ci,千萬不能有錯,完了點擊確定即可,數據庫就創建好了。
在這里插入圖片描述

2.使用代碼創建數據表

使用代碼創建數據表,建議單獨建個Python文件,方便一會調用,該文件只用來創建數據表,我就取名叫create_table.py,這里先附上創建數據表全部代碼如下:

from sqlalchemy import Column, Integer, String, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine# 1、找到基本框架 -- 把自定義的類變成數據表  declarative_base--聲明基類
Base = declarative_base()# 2、連接數據庫
engine = create_engine('mysql+pymysql://root:66666666@localhost:3306/python1?charset=utf8'
)# 3、自定義類 -- 創建表
class User(Base):# 3.1 表名__tablename__ = '員工表'# 3.2 字段信息id = Column(Integer, primary_key=True, autoincrement=True, doc='員工ID')name = Column(String(20), doc='員工名字')age = Column(Integer, doc='員工年齡')sex = Column(Enum('男', '女'), doc='員工性別')phone = Column(String(30), doc='員工電話')# 3.3 字段信息初始化def __init__(self, id, name, age, sex, phone):self.id = idself.name = nameself.age = ageself.sex = sexself.phone = phone# 4、表的生成
Base.metadata.create_all(engine)

需要注意的是,代碼中第三大部分創建表這里需要自己根據自己的實際需求去寫,如下圖:在這里插入圖片描述

其余的所有部分都是創建數據表的標準模板,可以不做改動。

3.用代碼操作數據表

用代碼操作數據表,也就是通過代碼對數據庫中數據表內容進行增刪改查等等操作,這里我也再新建一個Python文件,取名叫operation_table.py,先附上固定模版代碼部分:

from create_table import User
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker# 1、連接數據庫
engine = create_engine('mysql+pymysql://root:66666666@localhost:3306/python1?charset=utf8'
)# 2、創建一個會話對象 -- 第三者 -- 執行語句
# 2.1 綁定引擎
dbsession = sessionmaker(bind=engine)
# 2.2 實例化
session = dbsession()# 3、數據增刪改查# 4、事務提交和關閉
session.commit()
session.close()

代碼中第三部分數據的增刪改查是根據自身需求實際對數據進行操作,其余所有部分均為固定模版,可以不做改動。

接下來說說第三部分,如何用代碼對數據表中的數據做增刪改查。

3.1 增加數據

A、增加單個數據:使用add()方法,示例如下所示

user = User(0, '張三', 18, '男', '1001')
session.add(user)

B、增加多個數據:使用add_all(列表)方法,示例如下所示

user1 = User(0, '張三', 20, '男', '1003')
user2 = User(0, '李四', 21, '女', '1004')
user3 = User(0, '王五', 22, '男', '1005')
user4 = User(0, '趙六', 23, '女', '1006')
user5 = User(0, '麻七', 24, '男', '1007')
session.add_all([user1, user2, user3, user4, user5])
3.2 查詢數據

A、查詢所有員工的信息,示例如下所示

query_obj = session.query(User).all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone)

B、查詢年齡在19-24的員工信息,示例如下所示

query_obj = session.query(User).filter(User.age.between(19, 24)).all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')

C、查詢性別為男的員工信息,示例如下所示

query_obj = session.query(User).filter(User.sex == '男').all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')

D、查詢性別為男的員工信息,并按年齡大小排序【升序:asc(),降序:desc()】,示例如下所示

query_obj = session.query(User).filter(User.sex == '男').order_by(User.age.asc()).all()
for obj in query_obj:print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')
3.3 刪除數據

A、刪除員工:姓名=張三,示例如下所示

session.query(User).filter(User.name == '張三').delete()

B、刪除員工:電話=1005,示例如下所示

session.query(User).filter(User.phone == 1005).delete()

C、清空員工信息表,示例如下所示

session.query(User).delete()
3.4 修改數據

A、id=18的用戶姓名改成小明,示例如下所示

session.query(User).filter(User.id == 18).update({'name': '小明'})

B、id=22的用戶姓名改成小紅,性別改成女,電話改成0000,示例如下所示

session.query(User).filter(User.id == 22).update({'name': '小紅', 'sex': '女', 'phone': '0000'})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14197.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14197.shtml

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

相關文章

2025秋招深度學習基礎面試題(一)

01. 卷積和BN如何融合提升推理速度 Conv和BN的融合:在網絡的推理階段,可以將BN層的運算融合到Conv層中,減少運算量,加速推理。本質上是修改了卷積核的參數,在不增加Conv層計算量的同時,略去了BN層的計算量。def fuse_conv_bn(conv, bn):std = (bn.running_var + bn.eps).…

數據倉庫、數據中臺、大數據平臺之間的關系

數據行業經常會出現數據倉庫、數據中臺、大數據平臺等概念,容易產生疑問,它們中間是相等,還是包含的關系? 數據中臺和數據倉庫概念的關系 數據中臺概念是包含數據倉庫的,數據倉庫是數據中臺中的一部分,包含…

探索Facebook:數字社交的新時代

Facebook,作為全球最大的社交網絡平臺之一,一直在引領著數字社交的發展潮流。隨著科技的不斷進步和社會的不斷變遷,Facebook也在不斷演進和創新,迎接著數字社交的新時代。本文將探索Facebook在數字社交領域的新發展,以…

Behind the Code:Polkadot 如何重塑 Web3 未來

2024 年 5 月 17 日 Polkadot 生態 Behind the Code 第二季第一集 《創造 Web3 的未來》正式上線。第一集深入探討了 Polkadot 和 Web3 技術在解決數字身份、數據所有權和去中心化治理方面的巨大潛力。 🔍 查看完整視頻: https://youtu.be/_gP-M5nUidc?…

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具

抖音視頻怎么去水印保存部分源碼|短視頻爬蟲提取收集下載工具 抖音視頻去水印保存部分源碼: 通過使用Python中的requests、re和os等庫,可以編寫如下代碼來實現抖音視頻去水印保存的功能。 短視頻爬蟲提取手機下載工具的使用方法: 該工具主…

BevDet-4d(2): 環境安裝及效果展示

1. 環境安裝 conda create -n bevdet python=3.8 conda activate bevdet ? # 3 虛擬環境bevdet中安裝torch pip install spconv pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch

【數理統計02】延森Jensen‘s不等式的證明

延森不等式(Jensen’s Inequality)是凸函數理論中的一個重要結果,廣泛應用于概率論、統計學和優化理論等領域。這個不等式的基本形式是: 對于一個凸函數 f f f和一個隨機變量 X X X,如果 E [ X ] \mathbb{E}[X] E[X]存…

安科瑞為河南省促進分布式光伏發電健康持續發展提供解決方案

1 光伏、儲能運維市場分析 在光伏、儲能行業飛速發展的同時,已建的光伏、風力發電站和儲能系統的監控、運維管理項目的招標也非常多,2023年上半年,光伏電站開發企業運維招標規模28.6GW,同比增長204.3%,上述28.6GW招標…

Blender導出fbx模型,導入到ue5中模型丟失紋理材質

UE5系列文章目錄 文章目錄 UE5系列文章目錄前言一、問題原因二、最終效果 前言 Blender導出fbx模型,導入到ue5中,發現模型丟失紋理材質,里面的原神人物模型妮露居然是白模,郁悶了大半天 一、問題原因 我在Blender導出fbx文件時…

【Python】全局變量與init的區別

一個腳本里,設置全局變量,和初始化類時__init__中加載,有什么區別? 在Python腳本中,使用全局變量和在類的__init__方法中加載數據有幾個關鍵區別: 作用域: 全局變量:全局變量在整個…

C中十進制轉十六進制示例

uint8_t QR_code_RxBfr[255]{0}; uint8_t TouchCode[100];memcpy (&Sys.TouchCode[0], &QR_code_RxBfr[0], Sys.QR_code_Len);Str &Sys.TouchCode[TmpVble];Sys.Card_ID 0; while(0 ! isdigit(*Str)){Sys.Card_ID Sys.Card_ID*10 *Str - 0;Str;} 最后在通過以下…

嵌入式科普(18)Ubuntu在移動硬盤的安裝和啟動

目錄 一、概述 二、應用場景 三、移動硬盤安裝Ubuntu 3.1 移動硬盤格式化 3.2 VMware安裝Ubuntu到移動硬盤 四、電腦BIOS啟動移動硬盤Ubuntu 五、從VMware啟動移動硬盤Ubuntu 六、問題解決(坑)和思考提問 嵌入式科普(18)Ubuntu在移動硬盤的安裝和啟動 一、概述 在移動硬…

在R中贊揚下努力工作的你,獎勵一份CheetShet

傳說有個R,R里有個包,包的名字叫praise,會一直不停地夸贊你。 > praise() [1] "You are sensational!" > praise() [1] "You are luminous!" > praise() [1] "You are pioneering!" > praise() […

P1【知識點】【數據結構】【鏈表LinkedList】C++版

鏈表是一種邏輯上連續,內存上分散的線性表數據結構,是用一組任意的空間(可以連續,也可以不連續)來存放數據元素。每個數據元素成為一個”結點“,每個結點由數據域和指針域組成。 訪問元素(Acce…

ABAP Json解析案例

ABAP解析返回的JSON 案例 DATA:LTOKEN TYPE STRING.DATA: LL_LINES(10),"行數LL_TABIX(10),"循環標號LL_PECNT TYPE P LENGTH 6 DECIMALS 2, "百分比LL_PECET(6),"百分數LL_TEXT(40)."消息CLEAR: LL_LINES,LL_TABIX,LL_PECNT,LL_PECET,LL_TEXT.* …

JVM優化之使用Jstack命令查找JVM死鎖

JVM優化之使用Jstack命令查找JVM死鎖 示例代碼 public class DeadLockDemo {private static Object lock1 new Object();private static Object lock2 new Object();public static void main(String[] args) {new Thread(() -> {synchronized (lock1) {try {System.out.p…

老的 IIS + MSSQL 網站遷移實例

因為公司需要從云上遷移回本地,但云平臺不愿意導出虛擬機文件,所以公司需要手工遷移。 查看了一下云主機,安裝了IIS,還有MSSQL數據庫,于是在本地搭建好相同的OSIISMSSQL 環境,在把數據庫導入完成、 IIS 搭建…

HX6203是一個完整的電池充電器控制器的兩個(8.4V)電池鋰離子電池芯片IC

一般描述 該HX6203是一個完整的電池充電器控制器的兩個(8.4V)電池鋰離子電池。HX6203為快速充電鋰離子電池提供了一種小巧、簡單、高效的解決方案。一個外部檢測電阻以高精度設置充電電流。 內部電阻分壓器和精密參考設置的最終浮動電壓為8.4V時,輸入…

全面提升工業物聯網的安全問題——青創智通

工業物聯網解決方案-工業IOT-青創智通 工業物聯網,作為現代工業制造領域的新興技術,正在引領一場全新的工業革命。它將傳感器、控制器、移動通信、智能分析等先進技術融入到工業生產過程的各個環節,極大地提高了制造效率,改善了產…

什么是谷歌留痕?

其實它就是指你的網站在谷歌中留下的種種痕跡,無論你是在做外鏈,還是優化網站內容,或是改善用戶體驗,所有這些都會在谷歌的搜索引擎里留下一些“腳印”,用比較seo一點的說法,指的是網站在其構建和優化過程中…