Python - Python連接數據庫

Python的標準數據庫接口為:Python DB-API,Python DB-API為開發人員提供了數據庫應用編程接口。

PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個實現庫,Python2中則使用mysqldb。 PyMySQL 遵循 Python 數據庫 API v2.0 規范,并包含了 pure-Python MySQL 客戶端庫。

一、安裝PyMySQL

在使用 PyMySQL 之前,我們需要確保 PyMySQL 已安裝。

PyMySQL 下載地址:https://github.com/PyMySQL/PyMySQL

如果還未安裝,我們可以使用以下命令安裝最新版的 PyMySQL:

pip install PyMySQL

二、連接數據庫

1、建表

數據庫準備,連接數據庫之前,請確保已經創建了python數據庫,以及students表

建表SQL如下:

CREATE TABLE `student`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',`stu_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '學生名字',`stu_class` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '學生班級',`stu_age` int NULL DEFAULT NULL COMMENT '學生年齡',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '學生表' ROW_FORMAT = Dynamic;

2、創建Connection 對象:用于建立與數據庫的連接

from pymysql import * 
# 導入pymysql模塊 
# 創建連接對象 Connection對象 
# host:數據庫主機地址 
# user:數據庫賬號 
# password:數據庫密碼 
# database : 需要連接的數據庫的名稱 
# port: mysql的端口號 
# charset: 通信采用編碼格式 
conn = connect(host='127.0.0.1', user='root', password='mysql', database='python', port=3306, charset='utf8') 

1、Connection 連接對象擁有的方法

close():關閉連接,連接數據庫跟打開文件一樣,操作完成之后需要關閉,否則會占用連接

commit():提交,pymysql 默認開啟事物,所以每次更新數據庫都要提交 rollback()回滾,事務回滾

cursor():返回Cursor對象,用于執行sql語句并獲得結果

2、獲取cursor對象

cur = conn.cursor() # cursor對象用于執行sql語句 

3、cursor對象擁有的方法

close():關閉cursor對象

execute(operation [, parameters ]) 執行語句,返回受影響的行數,可以執行所有語句

fetchone():獲取查詢結果集的第一個行數據,返回一個元組

fetchall():執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回

3、SQL增刪改查

1、插入語句

insertSql = '''insert into student(stu_name,stu_class,stu_age) values ('張三','高三一班',18)'''
cur.execute(insertSql)
conn.commit()  # 提交事務

2、查詢語句

cur.execute('select * from students;') # 執行sql語句,select * from students; 
res = cur.fetchone() # 獲取結果集的第一條數據 
res1 = cur.fetchall() # 獲取結果及的所有數據 
print(res) # 將獲取的查詢結果打印 
print(res1) 

3、占位符:%s

執行sql語句參數化,參數化sql語句中使用%s占位。 execute(operation [parameters]) 執行語句,返回受影響的行數,可以執行所有語句 [parameters] 參數列表

# sql語句中使用%s占位
sql = 'select * from students where id=%s and stu_name= %s;' 	
# 執行sql語句
cur.execute(sql, [1,'張三'])
from pymysql import *'''
創建Connection 對象:用于建立與數據庫的連接
導入pymysql模塊 
# 創建連接對象 Connection對象 
# host:數據庫主機地址 
# user:數據庫賬號 
# password:數據庫密碼 
# database : 需要連接的數據庫的名稱 
# port: mysql的端口號 
# charset: 通信采用編碼格式
'''
conn = connect(host='localhost', port=3306, user='root', password='mysql', database='my_db', charset='utf8')try:# 創建游標對象cur = conn.cursor()# 執行sql語句# insertSql = '''insert into student(stu_name,stu_class,stu_age) values ('張三','高三一班',18);'''# cur.execute(insertSql)# conn.commit()  # 提交事務selectSql = '''select * from student where id=%s;'''cur.execute(selectSql,3)# selectSql = '''select * from student;'''# cur.execute(selectSql)# res = cur.fetchone()  # 獲取結果集的第一條數據# print(res)# 獲取結果及的所有數據result = cur.fetchall()for item in result:# 姓名:張三,班級:高三一班,年齡:18print('姓名:{0},班級:{1},年齡:{2}'.format(item[1], item[2], item[3]))
except Exception as msg:print(msg.args)
finally:# 關閉游標對象cur.close()# 關閉連接對象conn.close()

三、封裝連接PyMySQL數據庫工具

創建一個db_client.py文件

import pymysqlclass DBUtil():conn=None@classmethoddef get_conn(cls):if cls.conn is None:cls.conn=pymysql.connect(host="localhost",port=3306,user="root",password="mysql",database="my_db",charset="utf8")return cls.conn@classmethoddef close_conn(cls):if cls.conn is not None:cls.conn.close()cls.conn=None@classmethoddef select_all(cls,sql):cursor=Noneresult=Nonetry:cls.get_conn()cursor=cls.conn.cursor()cursor.execute(sql)result=cursor.fetchall()except Exception as e:print(e)finally:cursor.close()cls.close_conn()return result@classmethoddef uid(cls,sql):cursor=Nonetry:cls.get_conn()cursor=cls.conn.cursor()cursor.execute(sql)cls.conn.commit()except Exception as e:print(e)cls.conn.rollback()finally:cursor.close()cls.close_conn()
print('--------數據庫工具DB--------')
# ((3, '張三', '高三一班', 18), (4, '李四', '高三二班', 16))
print(DBUtil.select_all("select * from student"))

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

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

相關文章

面試八股文--數據庫基礎知識總結(1)

1、數據庫的定義 數據庫(DataBase,DB)簡單來說就是數據的集合數據庫管理系統(Database Management System,DBMS)是一種操縱和管理數據庫的大型軟件,通常用于建立、使用和維護數據庫。數據庫系統…

關于在java項目部署過程MySQL拒絕連接的分析和解決方法

前言 在最近一次部署項目一次項目部署過程中,由于沒有對MySQL數據庫的部分權限和遠程連接進行授權,導致了在執行項目功能API時,出現MySQL連接異常或MySQL拒絕連接的問題。 問題 以下是部分報錯截圖: 分析 根據日志提示&#xf…

PhotoLine綠色版 v25.00:全能型圖像處理軟件的深度解析

在圖像處理領域,PhotoLine以其強大的功能和緊湊的體積,贏得了國內外眾多用戶的喜愛。本文將為大家全面解析PhotoLine綠色版 v25.00的各項功能,幫助大家更好地了解這款全能型的圖像處理軟件。 一、迷你體積,強大功能 PhotoLine被譽為迷你版的Photoshop,其體積雖小,但功能卻…

阿里重磅模型深夜開源;DeepSeek宣布開源DeepGEMM;微軟開源多模態AI Agent基礎模型Magma...|網易數智日報

阿里重磅模型深夜開源:表現超越Sora、Pika,消費級顯卡就能跑 2月26日,25日深夜阿里云視頻生成大模型萬相2.1(Wan)正式宣布開源,此次開源采用Apache2.0協議,14B和1.3B兩個參數規格的全部推理代碼…

002 Java操作kafka客戶端

Java操作kafka客戶端 文章目錄 Java操作kafka客戶端3.Java操作kafka客戶端1.引入依賴2. Kafka服務配置3、生產者(Producer)實現1. 基礎配置與發送消息2. 關鍵配置說明 4.消費者(Consumer)實現1. 基礎配置與消費消息2. 關鍵配置說明…

【SRC實戰】信息泄露導致越權會員功能

01 — 漏洞證明 1、VIP功能 2、SVIP功能 3、點擊任意用戶發起私聊,發現userId純數字可遍歷 4、返回包泄露身高范圍height,星座constellation,屬相zodiac,戀愛目標purpose,教育程度degree,成功越權VIP功能 …

游戲引擎學習第125天

倉庫:https://gitee.com/mrxiao_com/2d_game_3 回顧并為今天的內容做準備。 昨天,當我們離開時,工作隊列已經完成了基本的功能。這個隊列雖然簡單,但它能夠執行任務,并且我們已經為各種操作編寫了測試。字符串也能夠正常推送到隊…

藍橋杯 Java B 組之記憶化搜索(滑雪問題、斐波那契數列)

Day 5:記憶化搜索(滑雪問題、斐波那契數列) 📖 一、記憶化搜索簡介 記憶化搜索(Memoization) 是一種優化遞歸的方法,它利用 哈希表(HashMap)或數組 存儲已經計算過的結果…

反爬蟲策略

反爬蟲策略是網站用于防止自動化程序(爬蟲)惡意抓取數據的核心手段,其設計需兼顧有效性、用戶體驗和合法性。 一、 基礎檢測與攔截 User-Agent檢測:驗證請求頭中的User-Agent,攔截非常見或已知爬蟲標識。IP頻率限制&…

Java 實現快速排序算法:一條快速通道,分而治之

大家好,今天我們來聊聊快速排序(QuickSort)算法,這個經典的排序算法被廣泛應用于各種需要高效排序的場景。作為一種分治法(Divide and Conquer)算法,快速排序的效率在平均情況下非常高&#xff…

深入解析 Spring 中的 BeanDefinition 和 BeanDefinitionRegistry

在 Spring 框架中,BeanDefinition 和 BeanDefinitionRegistry 是兩個非常重要的概念,它們共同構成了 Spring IoC 容器的核心機制。本文將詳細介紹這兩個組件的作用、實現以及它們之間的關系。 一、BeanDefinition:Bean 的配置描述 1.1 什么…

《OpenCV》——光流估計

什么是光流估計? 光流估計的前提? 基本假設 亮度恒定假設:目標像素點的亮度在相鄰幀之間保持不變。這是光流計算的基礎假設,基于此可以建立數學方程來求解光流。時間連續或運動平滑假設:相鄰幀之間的時間間隔足夠小&a…

信息系統的安全防護

文章目錄 引言**1. 物理安全****2. 網絡安全****3. 數據安全****4. 身份認證與訪問控制****5. 應用安全****6. 日志與監控****7. 人員與管理制度****8. 其他安全措施****9. 安全防護框架**引言 從技術、管理和人員三個方面綜合考慮,構建多層次、多維度的安全防護體系。 信息…

如何進行OceanBase 運維工具的部署和表性能優化

本文來自OceanBase 用戶的實踐分享 隨著OceanBase數據庫應用的日益深入,數據量不斷攀升,單個表中存儲數百萬乃至數千萬條數據的情況變得愈發普遍。因此,部署專門的運維工具、實施針對性的表性能優化策略,以及加強指標監測工作&…

如何防止 Instagram 賬號被盜用:安全設置與注意事項

如何防止 Instagram 賬號被盜用:安全設置與注意事項 在這個數字化時代,社交媒體平臺如 Instagram 已成為我們日常生活的一部分。然而,隨著網絡犯罪的增加,保護我們的在線賬戶安全變得尤為重要。以下是一些關鍵的安全設置和注意事…

Redis|復制 REPLICA

文章目錄 是什么能干嘛怎么玩案例演示復制原理和工作流程復制的缺點 是什么 官網地址:https://redis.io/docs/management/replication/Redis 復制機制用于將數據從一個主節點(Master)復制到一個或多個從節點(Slave)&a…

對象存儲之Ceph

Ceph 對象存儲概述 Ceph 是一個開源分布式存儲系統,旨在提供高度可擴展、高度可用、容錯、性能優異的存儲解決方案。它結合了塊存儲、文件系統存儲和對象存儲的功能,且在設計上具有極高的可擴展性和靈活性。 在 Ceph 中,對象存儲&#xff0…

Document對象

DOM4j中,獲得Document對象的方式有三種: 1.讀取XML文件,獲得document對象 SAXReader reader new SAXReader(); Document document reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document對象…

樹莓集團南京產業園再布局:深入剖析背后邏輯

在產業園區蓬勃發展的當下,樹莓集團在南京的產業園再布局行動備受矚目。這一舉措并非偶然,其背后蘊含著深刻且多元的戰略邏輯。 一、順應區域產業發展趨勢 南京作為長三角地區的重要城市,產業基礎雄厚且多元。近年來,南京大力推動…