Python 連接 MySQL 及 SQL增刪改查(主要使用sqlalchemy)

目錄

一、環境

二、MySQL的連接和使用

2.1方式一:sql為主

2.1.1創建連接

2.1.2 表結構

2.1.3?新增數據

?編輯

2.1.4 查看數據

?編輯

2.1.5?修改數據

2.1.6?刪除數據

2.2方式二:orm對象關系映射

2.2.1 mysql連接

2.2.2 創建表

2.2.3 新增數據

?編輯

2.2.4 查詢數據

2.2.5 修改數據

?編輯

2.2.6 刪除數據


一、環境

工作中需要用到python和mysql數據庫,本次文檔記錄相關操作。

環境:windows10、python 3.11.7

mysql版本:5.7

二、MySQL的連接和使用

本人使用過的兩種方式

2.1方式一:sql為主

2.1.1創建連接
import sqlalchemy
from sqlalchemy.orm import scoped_session, sessionmakerUSERNAME = "root"  # 用戶名
PASSWORD = "123456"  # 密碼
ADDR = "localhost"  # 連接地址 本地localhost 服務器就是服務器的地址XXX
PORT = "3306"  # mysql端口號
DATABASE = "test"  # 連接的數據庫名class MysqlSession:def __init__(self):self.create_connection()def create_connection(self):engine = sqlalchemy.create_engine(f"mysql+pymysql://{USERNAME}:{PASSWORD}@{ADDR}:{PORT}/{DATABASE}?charset=utf8",max_overflow=50,  # 超過連接池大小外最多創建的連接pool_size=50,  # 連接池大小pool_recycle=30  # 多久之后對線程池中的線程進行一次連接的回收(重置),, echo=False)self.connection = scoped_session(sessionmaker(bind=engine))def get_connection(self):return self.connectiondef ins(self, sql):  # 新增數據return self.connection.execute(sql).lastrowiddef arr(self, sql):  # 查詢多條數據return self.connection.execute(sql).fetchall()def obj(self, sql):  # 查詢單個數據return self.connection.execute(sql).fetchone()def upd(self, sql):  # 修改單個數據return self.connection.execute(sql)def dlt(self, sql):  # 刪除數據return self.connection.execute(sql)def commit(self):self.connection.commit()  # 提交self.connection.remove()  # 結束會話
2.1.2 表結構

2.1.3?新增數據
mysql_session = MysqlSession()
connection = mysql_session.get_connection()
table_name = 'test.user'  # 表名(這里是數據庫名+表名)
# 新增數據,返回的該條數據的id
name_remark = [{'name': 'Alice', 'remark': '可能是個女生'},{'name': 'Bob', 'remark': "可能是個男生"},{'name': 'Tammi'}
]
new_ids = []
for p in name_remark:name = p.get('name')remark = p.get('remark')sql = f"""insert into {table_name} (name,remark) values ('{name}','{remark}')"""user_id = mysql_session.ins(sql)new_ids.append(user_id)
print(new_ids)
mysql_session.commit()
2.1.4 查看數據
# 查看所有數據
sql = f"""select * from {table_name}"""
users = mysql_session.arr(sql)
for u in users:print(u)
# 查看指定數據
sql = f"""select * from {table_name} where name='Alice'"""
user = mysql_session.obj(sql)
print(user)

2.1.5?修改數據
# 修改指定數據
sql = f"""update {table_name} set name='Alice_changed' where id=16"""
mysql_session.upd(sql)
mysql_session.commit()
# 查看剛才修改的數據
sql = f"""select * from {table_name} where id=16 """
user = mysql_session.obj(sql)
print(user)

2.1.6?刪除數據
# 刪除指定數據
sql = f"""delete from {table_name} where id=16"""
mysql_session.dlt(sql)
mysql_session.commit()
# 查看所有數據
users = show_test(mysql_session, table_name)
print(users)

2.2方式二:orm對象關系映射

因為現目前工作中沒有用到這個(以前用django的時候有用到過orm),這里就簡單記錄一下測試情況。

2.2.1 mysql連接

mysql_session.py

import sqlalchemy
from sqlalchemy.orm import sessionmakerUSERNAME = "root"  # 用戶名
PASSWORD = "123456"  # 密碼
ADDR = "localhost"  # 連接地址 本地localhost 服務器就是服務器的地址XXX
PORT = "3306"  # mysql端口號
DATABASE = "test"  # 連接的數據庫名class MysqlSession:def __init__(self):self.create_connection()def create_connection(self):self.engine = sqlalchemy.create_engine(f"mysql+pymysql://{USERNAME}:{PASSWORD}@{ADDR}:{PORT}/{DATABASE}?charset=utf8",max_overflow=50,  # 超過連接池大小外最多創建的連接pool_size=50,  # 連接池大小pool_recycle=30,  # 多久之后對線程池中的線程進行一次連接的回收(重置),echo=False)Session = sessionmaker(bind=self.engine)self.session = Session()def get_session(self):return self.sessiondef get_engine(self):return self.engine
2.2.2 創建表

models.py

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_basefrom mysql_session import MysqlSessionBase = declarative_base()class User(Base):__tablename__ = 'person'id = Column(Integer, primary_key=True, autoincrement=True)  # 主鍵 自增name = Column(String(255))age = Column(Integer)engine = MysqlSession().get_engine()
Base.metadata.create_all(engine) #創建上面的表,運行一次即可

2.2.3 新增數據
from models import Person
from mysql_session import MysqlSessionsession = MysqlSession().get_session()# 新增幾條數據
new_user = Person(name='張三', age=30)
session.add(new_user)
new_user = Person(name='李四', age=40)
session.add(new_user)
new_user = Person(name='王五', age=50)
session.add(new_user)
session.commit()
2.2.4 查詢數據
# 查詢所有數據
users = session.query(Person).all()
for user in users:print(user.name, user.age)
print("**************************************")
# 指定信息
user = session.query(Person).filter_by(name='李四').first()
print(user.name, user.age)

2.2.5 修改數據
# 修改數據
user = session.query(Person).filter_by(name='李四').first()
if user:user.age = 400  # 將年齡修改為400session.commit()print("updated success.")print(user.name, user.age)
else:print("not found.")

2.2.6 刪除數據
# 刪除所有年齡大于100的用戶
users = session.query(Person).filter(Person.age > 100).all()
for u in users:print(u.name, u.age)
for user in users:session.delete(user)
session.commit()

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

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

相關文章

windows 安裝pnpm

安裝Node.js: 確保系統上已安裝Node.js。pnpm需要Node.js來運行。如果尚未安裝Node.js,請從其官方網站下載并安裝適用于Windows的最新版本。 安裝pnpm: 打開命令行工具(如CMD、PowerShell或Git Bash)。使用npm&…

解鎖機器學習的無限可能:深入探究scikit-learn的強大功能

解鎖機器學習的無限可能:深入探究scikit-learn的強大功能 第一部分:背景和功能介紹 在數據科學和機器學習領域,scikit-learn(簡稱sklearn)是一個廣泛使用的Python庫。它提供了簡單高效的工具用于數據挖掘和數據分析&a…

【Python短期內快速掌握學習人工智能知識能力】:從零到入門的NLP學習秘籍

??我叫憶_恒心,一名喜歡書寫博客的研究生👨?🎓。 如果覺得本文能幫到您,麻煩點個贊👍唄! 近期會不斷在專欄里進行更新講解博客~~~ 有什么問題的小伙伴 歡迎留言提問歐,喜歡的小伙伴給個三連支…

Echarts 在折線圖的指定位置繪制一個圖標展示

文章目錄 需求分析需求 在線段交匯處用一個六邊形圖標展示 分析 可以使用 markPoint 和 symbol 屬性來實現。這是一個更簡單和更標準的方法來添加標記點在運行下述代碼后,你將在瀏覽器中看到一個折線圖,其中在 [3, 35] (即圖表中第四個數據點 Thu 的 y 值為 35 的位置)處…

Java反射Reflect機制詳解

文章目錄 引言反射的基本概念反射基本原理反射應用場景反射基本使用獲取類的Class對象獲取構造方法并實例化對象獲取和調用方法獲取和修改字段反射工具類 反射源碼解讀獲取Class對象的源碼調用方法的源碼 反射優缺點優點缺點 為什么需要反射總結 引言 Java反射是Java語言中的一…

【干貨】視頻文件抽幀(opencv和ffmpeg方式對比)

1 廢話不多說,直接上代碼 opencv方式 import time import subprocess import cv2, os from math import ceildef extract_frames_opencv(video_path, output_folder, frame_rate1):"""使用 OpenCV 從視頻中抽取每秒指定幀數的幀,并保存到指定文件夾…

linux系統使用達夢數據庫

在Linux系統中使用達夢數據庫,首先需要確保已經正確安裝了達夢數據庫軟件。以下是一個基本的使用示例,假設您已經安裝了達夢數據庫并且配置好了相關環境變量。 連接到數據庫: 使用 dsql 命令連接到數據庫 dsql -h hostname -u username -p…

寶貝,帶上WebAssembly,換個姿勢來優化你的前端應用

在你沒崛起之前,臉是用來丟的 大家好,我是柒八九。一個專注于前端開發技術/Rust及AI應用知識分享的Coder 此篇文章所涉及到的技術有 WebAssemblyRustWeb Worker(comlink)wasm-packPhotonffmpeg.wasm腳手架生成前端項目因為,行文字數所限,有些概念可能會一帶而過亦或者提供對…

BOM是什么東西

BOM(Byte Order Mark,字節順序標記)是一個Unicode字符,通常出現在文本文件的開頭。它的作用包括以下幾個方面: 1. 指示文件的編碼方式 BOM可以幫助軟件識別文本文件使用的字符編碼。不同的編碼方式可能會使用不同的B…

經濟與安全兼顧:茶飲店購買可燃氣體報警器的價格考量

可燃氣體報警器在如今的社會中扮演著至關重要的角色。它們用于檢測環境中的可燃氣體濃度,及早發現潛在的火災隱患,保護人們的生命和財產安全。 在這篇文章中,佰德將介紹可燃氣體報警器的安裝、檢定以及價格,通過實際案例和數據&a…

PCL 生成空間橢圓點云

目錄 一、算法原理二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲。 一、算法原理 設橢圓在 X O Y XOY XOY平面上,參數方程為:

怎么保障TikTok直播網絡穩定?

TikTok,這個近年來風靡全球的社交媒體平臺,已成為電商引流的新方向,尤其是其直播功能。然而,對于打算進軍TikTok直播領域的商家和主播而言,確保網絡穩定無疑是首要任務。那么,TikTok直播專線究竟是什么呢&a…

牛啊后續:如何一行C#代碼實現解析類型的Summary注釋(可用于數據字典快速生成)...

前言:下午有小伙伴要求,讓我繼續做個解析實體類注釋信息的內容。所以我也順便加入進來。以下開始正文實戰操作: 項目需要勾選輸出api文檔文件。這樣就可以讓所有實體類的summary信息被寫入到輸出目錄下。如果有多個xml文件也沒關系&#xff0…

小程序 UI 風格美不勝收

小程序 UI 風格美不勝收 小程序 UI 風格美不勝收

PostgreSQL的視圖pg_stat_replication

PostgreSQL的視圖pg_stat_replication pg_stat_replication 是 PostgreSQL 提供的一個系統視圖,用于顯示主服務器上當前正在進行的復制會話的信息。它可以幫助數據庫管理員監控和管理主從復制的狀態,確保數據的正確同步和高可靠性。 pg_stat_replicati…

MyEclipse中properties文件中文亂碼(Unicode字符)解決辦法

程序代碼園發文地址:MyEclipse中properties文件中文亂碼(Unicode字符)解決辦法-程序代碼園小說,Java,HTML,Java小工具,程序代碼園,http://www.byqws.com/ ,MyEclipse中properties文件中文亂碼(Unicode字符)解決辦法htt…

Django學習三:views業務層中通過models對實體對象進行的增、刪、改、查操作。

文章目錄 前言一、Django ORM介紹二、項目快速搭建三、操作1、view.pya、增加操作b、刪除操作c、修改操作d、查詢操作 2、urls.py 前言 上接博文:Django學習二:配置mysql,創建model實例,自動創建數據庫表,對mysql數據…

一周發文9篇!MIMIC-IV數據庫周報(5.22~5.28)

重癥醫學數據庫(MIMIC)是由計算生理學實驗室開發的公開數據集,其中包括與數千個重癥監護病房入院相關的去識別化健康數據,致力于推動臨床信息學、流行病學和機器學習的研究。 MIMIC數據庫于2003年在美國國立衛生研究院的資助下&am…

2024上海初中生古詩文大會倒計時4個半月:單選題真題示例和獨家解析

現在距離2024年初中生古詩文大會還有4個半月時間,我們來看10道選擇題真題和詳細解析,了解古詩文大會的考察方式和知識點,從而更好地備考。 以下題目截取自我獨家制作的在線真題集,都是來自于歷屆真題,去重、合并后&am…

數據倉庫緩慢變化維介紹

緩慢變化維(Slowly Changing Dimensions, SCD)是數據倉庫設計中的一個重要概念,用于處理維度表中隨時間緩慢變化的屬性。維度表中的數據通常描述業務實體(如客戶、產品、員工等),而這些實體的某些屬性&…