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

Python操作MySQL的兩種方法詳解

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

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

核心庫選擇

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

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

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

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

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

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

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

1. 安裝庫

pip install pymysql

2. 基本連接與操作流程

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

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

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

connection = pymysql.connect(

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

    user='your_username',  用戶名

    password='your_password', 密碼

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

    charset='utf8mb4',     字符集,支持中文和表情符號推薦 utf8mb4

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

)

try:

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

    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'}

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

        

        獲取所有記錄

        results = cursor.fetchall()

        for row in results:

           print(row)

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

    with connection.cursor() as cursor:

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

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

    

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

    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` 語句。

import pymysql

使用 with 語句自動管理連接和游標(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é)束時,如果沒有異常,會自動 commit(); 如果有異常,會自動 rollback()

except pymysql.Error as e:

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

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

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

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ù)庫連接字符串

格式: 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ù)庫的連接核心

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

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)建會話工廠 (Session)

Session = sessionmaker(bind=engine)

7. 使用會話進行增刪改查

新增數(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自動賦值

查詢數(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}")

最佳實踐與重要提示

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

錯誤做法(SQL注入風(fēng)險): `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ù)庫密碼等硬編碼在代碼中!

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

示例(使用 `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ù)庫連接是昂貴的資源,一定要確保在使用后正確關(guān)閉。強烈推薦使用 `with` 語句上下文管理器。

4.  選擇策略

簡單腳本、需要精細控制SQL:選擇 PyMySQL 或 mysql-connector-python。

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

另外搭配便捷的MYSQL備份工具,可定時備份、異地備份,MYSQL導(dǎo)出導(dǎo)入??杀镜剡B接LINUX里的MYSQL,簡單便捷??梢源蟠蟮靥岣吖ぷ餍枢浮?/p>

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

相關(guān)文章

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

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

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

    python對excel文檔去重及求和的實例

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

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

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

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

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

    Flask框架運用Ajax實現(xiàn)輪詢動態(tài)繪圖

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

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

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

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

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

    Python的Import機制的模塊與包深入理解

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

    Python自動登錄126郵箱的方法

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

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

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

最新評論

利津县| 齐齐哈尔市| 屏山县| 新密市| 山阴县| 阿拉善盟| 东港市| 盐城市| 芜湖市| 深泽县| 城步| 咸阳市| 若尔盖县| 永州市| 云和县| 探索| 芷江| 岫岩| 上林县| 鄂尔多斯市| 祁阳县| 葫芦岛市| 盐池县| 宜川县| 汝阳县| 蓝田县| 奉化市| 类乌齐县| 当雄县| 新巴尔虎左旗| 金湖县| 博湖县| 泰兴市| 宜城市| 阿拉善盟| 辰溪县| 油尖旺区| 濉溪县| 师宗县| 务川| 交城县|