最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python操作MySQL的兩種方法詳解

 更新時(shí)間:2025年09月08日 09:40:06   作者:xhbh666  
Python操作MySQL數(shù)據(jù)庫(kù)是一種常見的任務(wù),特別是在開發(fā)Web應(yīng)用或者需要存儲(chǔ)和處理數(shù)據(jù)的系統(tǒng)中,本篇文章將詳細(xì)闡述Python操作MySQL的兩種方法,需要的朋友可以參考下

‍今天詳細(xì)講解一下在 Python 中連接 MySQL 數(shù)據(jù)庫(kù)的幾種主流方法。這將是一個(gè)從基礎(chǔ)到進(jìn)階的完整指南。

核心庫(kù)選擇

在 Python 中連接 MySQL,主要有兩個(gè)流行的驅(qū)動(dòng):

1.  mysql-connector-python: MySQL 官方提供的純 Python 驅(qū)動(dòng)。無(wú)需其他依賴,安裝簡(jiǎn)單。

2.  PyMySQL: 一個(gè)純 Python 的 MySQL 客戶端,兼容性很好,非常流行。

3.  (底層驅(qū)動(dòng)) MySQLdb: 一個(gè) C 擴(kuò)展模塊,速度很快,但在 Python 3 上安裝可能較麻煩,通常被 PyMySQL 替代。

對(duì)于現(xiàn)代項(xiàng)目,PyMySQL 和 mysql-connector-python 是最常見的選擇。本指南將以 `PyMySQL` 和 `SQLAlchemy` 為例。

方法一:使用 PyMySQL 直接連接(基礎(chǔ)方法)

這種方式提供了最直接的 SQL 操作,適合需要完全控制 SQL 語(yǔ)句的場(chǎng)景。

1. 安裝庫(kù)

pip install pymysql

2. 基本連接與操作流程

完整的操作流程遵循 連接 -> 創(chuàng)建游標(biāo) -> 執(zhí)行SQL -> 提交 -> 關(guān)閉 的步驟。

import pymysql
from pymysql.cursors import DictCursor 可選,用于獲取字典格式的結(jié)果

1. 建立數(shù)據(jù)庫(kù)連接

connection = pymysql.connect(

    host='localhost',      數(shù)據(jù)庫(kù)服務(wù)器地址,本地可用 localhost 或 127.0.0.1

    user='your_username',  用戶名

    password='your_password', 密碼

    database='your_database_name', 要連接的數(shù)據(jù)庫(kù)名

    charset='utf8mb4',     字符集,支持中文和表情符號(hào)推薦 utf8mb4

    cursorclass=DictCursor 可選:設(shè)置游標(biāo)類型,返回字典而非元組

)

try:

    2. 創(chuàng)建一個(gè)游標(biāo)對(duì)象,用于執(zhí)行SQL語(yǔ)句

    with connection.cursor() as cursor:

        示例1: 執(zhí)行一條 SELECT 查詢

        sql = "SELECT `id`, `name` FROM `users` WHERE `email` = %s"

        cursor.execute(sql, ('user@example.com',)) 使用參數(shù)化查詢,防止SQL注入!

        

        獲取結(jié)果

        result = cursor.fetchone() 獲取單條記錄

        print(result) 如果是DictCursor,輸出: {'id': 1, 'name': 'John'}

        如果用默認(rèn)游標(biāo),輸出: (1, 'John')

        

        獲取所有記錄

        results = cursor.fetchall()

        for row in results:

           print(row)

    示例2: 執(zhí)行一條 INSERT 語(yǔ)句

    with connection.cursor() as cursor:

        sql = "INSERT INTO `users` (`name`, `email`) VALUES (%s, %s)"

        cursor.execute(sql, ('Alice', 'alice@example.com'))

    

    3. 提交事務(wù)!對(duì)于INSERT/UPDATE/DELETE等寫操作,必須提交才會(huì)生效。

    connection.commit()

    示例3: 獲取剛插入數(shù)據(jù)的主鍵ID

    with connection.cursor() as cursor:

        sql = "INSERT INTO `users` (`name`, `email`) VALUES (%s, %s)"

        cursor.execute(sql, ('Bob', 'bob@example.com'))

        connection.commit()

        print(f"新插入記錄的ID是: {cursor.lastrowid}")

finally:

    4. 關(guān)閉連接,釋放資源

    connection.close()

3. 使用上下文管理器 (推薦)

為了確保連接總是能被正確關(guān)閉,即使發(fā)生異常,推薦使用 `with` 語(yǔ)句。

import pymysql

使用 with 語(yǔ)句自動(dòng)管理連接和游標(biāo)的關(guān)閉

try:

    with pymysql.connect(host='localhost', user='root', password='password', database='test') as conn:

        with conn.cursor() as cursor:

            cursor.execute("SELECT VERSION()")

            result = cursor.fetchone()

            print(f"Database version: {result[0]}")

        連接結(jié)束時(shí),如果沒有異常,會(huì)自動(dòng) commit(); 如果有異常,會(huì)自動(dòng) rollback()

except pymysql.Error as e:

    print(f"Database error: {e}")

方法二:使用 SQLAlchemy (ORM 框架,進(jìn)階方法)

ORM (Object-Relational Mapping) 允許你使用 Python 類和對(duì)象來(lái)操作數(shù)據(jù)庫(kù),而不是直接寫 SQL。這對(duì)于大型、復(fù)雜的項(xiàng)目非常有益,可以提高開發(fā)效率和代碼可維護(hù)性。

1. 安裝

pip install sqlalchemy pymysql

2. 核心組件與連接

from sqlalchemy import create_engine, Column, Integer, String

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker

1. 定義數(shù)據(jù)庫(kù)連接字符串

格式: dialect+driver://username:password@host:port/database

DB_URI = 'mysql+pymysql://username:password@localhost:3306/your_database?charset=utf8mb4'

2. 創(chuàng)建引擎 (Engine),它是ORM和數(shù)據(jù)庫(kù)的連接核心

engine = create_engine(DB_URI, echo=True) echo=True 會(huì)打印執(zhí)行的SQL,調(diào)試時(shí)有用

3. 創(chuàng)建基類

Base = declarative_base()

4. 定義映射類(模型)

class User(Base):

    __tablename__ = 'users' 指定映射的表名

    id = Column(Integer, primary_key=True, autoincrement=True)

    name = Column(String(50), nullable=False)

    email = Column(String(100), unique=True)

5. 創(chuàng)建所有表(如果不存在)

Base.metadata.create_all(engine)

6. 創(chuàng)建會(huì)話工廠 (Session)

Session = sessionmaker(bind=engine)

7. 使用會(huì)話進(jìn)行增刪改查

新增數(shù)據(jù)

with Session() as session:

    new_user = User(name='Charlie', email='charlie@example.com')

    session.add(new_user)

    session.commit() 提交事務(wù)

    print(f"New user ID: {new_user.id}") 提交后,id自動(dòng)賦值

查詢數(shù)據(jù)

with Session() as session:

    查詢所有用戶

    users = session.query(User).all()

    for user in users:

        print(user.id, user.name, user.email)

    條件查詢

    user = session.query(User).filter_by(name='Charlie').first()

    if user:

        print(f"Found user: {user.name}")

最佳實(shí)踐與重要提示

1.  安全第一:永遠(yuǎn)使用參數(shù)化查詢

錯(cuò)誤做法(SQL注入風(fēng)險(xiǎn)): `cursor.execute(f"SELECT * FROM users WHERE name = '{user_input}'")`

正確做法: `cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))`

PyMySQL 使用 `%s` 作為占位符,即使數(shù)據(jù)是數(shù)字或日期。

2.  管理敏感信息

切勿將數(shù)據(jù)庫(kù)密碼等硬編碼在代碼中!

使用環(huán)境變量或配置文件(如 `.env` 文件)來(lái)管理。

示例(使用 `python-dotenv`):

        pip install python-dotenv
        .env 文件

        DB_HOST=localhost

        DB_USER=root

        DB_PASSWORD=your_secure_password

        DB_NAME=my_app

        ```

        ```python

        app.py

        from dotenv import load_dotenv

        import os

        import pymysql

        load_dotenv() 加載 .env 文件中的環(huán)境變量

        connection = pymysql.connect(

            host=os.getenv('DB_HOST'),

            user=os.getenv('DB_USER'),

            password=os.getenv('DB_PASSWORD'),

            database=os.getenv('DB_NAME')

        )

3.  連接管理

數(shù)據(jù)庫(kù)連接是昂貴的資源,一定要確保在使用后正確關(guān)閉。強(qiáng)烈推薦使用 `with` 語(yǔ)句上下文管理器。

4.  選擇策略

簡(jiǎn)單腳本、需要精細(xì)控制SQL:選擇 PyMySQL 或 mysql-connector-python。

Web應(yīng)用、復(fù)雜業(yè)務(wù)邏輯、希望代碼更Pythonic:選擇 SQLAlchemy ORM。

另外搭配便捷的MYSQL備份工具,可定時(shí)備份、異地備份,MYSQL導(dǎo)出導(dǎo)入。可本地連接LINUX里的MYSQL,簡(jiǎn)單便捷??梢源蟠蟮靥岣吖ぷ餍枢?。

以上就是Python操作MySQL的兩種方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python操作MySQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法分析

    Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法,結(jié)合實(shí)例形式分析了Python針對(duì)代碼行數(shù)的計(jì)算實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-07-07
  • python對(duì)excel文檔去重及求和的實(shí)例

    python對(duì)excel文檔去重及求和的實(shí)例

    下面小編就為大家分享一篇python對(duì)excel文檔去重及求和的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-04-04
  • 基于Python實(shí)現(xiàn)自制拼圖小游戲

    基于Python實(shí)現(xiàn)自制拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹得了如何利用Python中pygame的這個(gè)非標(biāo)準(zhǔn)庫(kù)來(lái)做個(gè)小游戲-拼圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-11-11
  • Python?hashlib模塊與哈希算法保護(hù)數(shù)據(jù)完整性教程

    Python?hashlib模塊與哈希算法保護(hù)數(shù)據(jù)完整性教程

    hashlib模塊為Python提供了一種簡(jiǎn)便的方式來(lái)使用各種哈希算法,如MD5、SHA-1、SHA-256等,哈希函數(shù)廣泛用于密碼學(xué)、數(shù)據(jù)完整性驗(yàn)證和安全存儲(chǔ)等領(lǐng)域
    2024-01-01
  • Flask框架運(yùn)用Ajax實(shí)現(xiàn)輪詢動(dòng)態(tài)繪圖

    Flask框架運(yùn)用Ajax實(shí)現(xiàn)輪詢動(dòng)態(tài)繪圖

    Ajax是異步JavaScript和XML可用于前后端交互,本文將通過Ajax輪詢獲取后端的數(shù)據(jù),前臺(tái)使用echart繪圖庫(kù)進(jìn)行圖形的生成與展示,最后實(shí)現(xiàn)動(dòng)態(tài)監(jiān)控內(nèi)存利用率的這個(gè)功能,需要的可以參考一下
    2022-11-11
  • python淘寶搶購(gòu)腳本程序?qū)崿F(xiàn)

    python淘寶搶購(gòu)腳本程序?qū)崿F(xiàn)

    大家好,本篇文章主要講的是python淘寶搶購(gòu)腳本程序?qū)崿F(xiàn),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • python中halcon環(huán)境配置的詳細(xì)步驟

    python中halcon環(huán)境配置的詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了python中halcon環(huán)境配置的詳細(xì)步驟,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解一下
    2025-06-06
  • Python的Import機(jī)制的模塊與包深入理解

    Python的Import機(jī)制的模塊與包深入理解

    深入理解Python的import機(jī)制有助于更好地組織代碼、提高代碼復(fù)用性,本文將深入研究Python的Import機(jī)制,包括模塊的導(dǎo)入過程、命名空間與作用域、相對(duì)導(dǎo)入以及包的結(jié)構(gòu)和導(dǎo)入等方面,通過豐富的示例代碼,助你更全面地理解和應(yīng)用這
    2024-01-01
  • Python自動(dòng)登錄126郵箱的方法

    Python自動(dòng)登錄126郵箱的方法

    這篇文章主要介紹了Python自動(dòng)登錄126郵箱的方法,涉及Python針對(duì)郵箱操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Python Sql數(shù)據(jù)庫(kù)增刪改查操作簡(jiǎn)單封裝

    Python Sql數(shù)據(jù)庫(kù)增刪改查操作簡(jiǎn)單封裝

    這篇文章主要為大家介紹了Python Sql數(shù)據(jù)庫(kù)增刪改查操作簡(jiǎn)單封裝,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評(píng)論

武隆县| 酉阳| 沙河市| 吕梁市| 临沭县| 和顺县| 杭锦后旗| 淳化县| 曲阜市| 楚雄市| 东海县| 无锡市| 宽甸| 饶平县| 万全县| 繁峙县| 中超| 夏津县| 紫金县| 长海县| 房产| 界首市| 奎屯市| 元朗区| 二连浩特市| 香港| 会东县| 綦江县| 花莲市| 林甸县| 科尔| 灌南县| 鹤峰县| 凤山县| 章丘市| 高青县| 古田县| 大悟县| 明溪县| 德州市| 淮南市|