国产成人精品亚洲日本在线_欧美精品v国产精品v_亚洲欧洲日韩国产一区二区三区_亚洲乱码一二三四区

9000px;">

<address id="tjdjd"></address>
<address id="tjdjd"></address>

    <address id="tjdjd"><nobr id="tjdjd"><progress id="tjdjd"></progress></nobr></address>

      <form id="tjdjd"><listing id="tjdjd"><meter id="tjdjd"></meter></listing></form>
      <address id="tjdjd"></address><address id="tjdjd"></address>

      當(dāng)前位置 主頁 > 技術(shù)大全 >

        告別SQL注入:詳解Python中MySQL參數(shù)化查詢的正確使用方法

        欄目:技術(shù)大全 時間:2025-09-24 21:10

        ‍今天詳細(xì)講解一下在 Python 中連接 MySQL 數(shù)據(jù)庫的幾種主流方法。這將是一個從基礎(chǔ)到進(jìn)階的完整指南。
        核心庫選擇
        在 Python 中連接 MySQL,主要有兩個流行的驅(qū)動:
        1. mysql-connector-python: MySQL 官方提供的純 Python 驅(qū)動。無需其他依賴,安裝簡單。
        2. PyMySQL: 一個純 Python 的 MySQL 客戶端,兼容性很好,非常流行。
        3. (底層驅(qū)動) MySQLdb: 一個 C 擴(kuò)展模塊,速度很快,但在 Python 3 上安裝可能較麻煩,通常被 PyMySQL 替代。
        對于現(xiàn)代項(xiàng)目,PyMySQL 和 mysql-connector-python 是最常見的選擇。本指南將以 `PyMySQL` 和 `SQLAlchemy` 為例。
        方法一:使用 PyMySQL 直接連接(基礎(chǔ)方法)
        這種方式提供了最直接的 SQL 操作,適合需要完全控制 SQL 語句的場景。
        1. 安裝庫
         
        ```bash
        pip install pymysql
        ```
         
        2. 基本連接與操作流程
         
        完整的操作流程遵循 連接 -> 創(chuàng)建游標(biāo) -> 執(zhí)行SQL -> 提交 -> 關(guān)閉 的步驟。
         
        ```python
        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'}
        如果用默認(rèn)游標(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` 語句。
         
        ```python
        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 框架,進(jìn)階方法)
         
        ORM (Object-Relational Mapping) 允許你使用 Python 類和對象來操作數(shù)據(jù)庫,而不是直接寫 SQL。這對于大型、復(fù)雜的項(xiàng)目非常有益,可以提高開發(fā)效率和代碼可維護(hù)性。
         
        1. 安裝
         
        ```bash
        pip install sqlalchemy pymysql
        ```
         
        2. 核心組件與連接
         
        ```python
        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. 使用會話進(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自動賦值
         
        查詢數(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ù)化查詢
        錯誤做法(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`):
        ```bash
        pip install python-dotenv
        ```
        ```python
        .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)閉。強(qiáng)烈推薦使用 `with` 語句上下文管理器。
         
        4. 選擇策略
        簡單腳本、需要精細(xì)控制SQL:選擇 PyMySQL 或 mysql-connector-python。
        Web應(yīng)用、復(fù)雜業(yè)務(wù)邏輯、希望代碼更Pythonic:選擇 SQLAlchemy ORM。
        另外搭配便捷的MYSQL備份工具,可定時備份、異地備份,MYSQL導(dǎo)出導(dǎo)入。可本地連接LINUX里的MYSQL,簡單便捷。可以大大地提高工作效率喔。

      MySQL鎖表會影響你的備份操作嗎?
      探索MySQL引擎?先掌握其備份恢復(fù)原理!
      mysql怎么安裝,MySQL安裝完畢怎樣設(shè)置自動備份才省心?
      MySQL 全連接(FULL OUTER JOIN)完全指南:語法、誤區(qū)與 UNION 實(shí)現(xiàn)方案
      MySQL刪除數(shù)據(jù)詳解:DELETE與TRUNCATE的原理、區(qū)別與正確選用
      MySQL UPDATE語句詳解:從基礎(chǔ)語法到多表連接更新實(shí)戰(zhàn)
      從備份到驗(yàn)證:MySQL表字段刪除操作的標(biāo)準(zhǔn)化流程與最佳實(shí)踐
      MySQL分頁查詢詳解:從LIMIT/OFFSET基礎(chǔ)到鍵集分頁性能優(yōu)化實(shí)戰(zhàn)
      告別SQL注入:詳解Python中MySQL參數(shù)化查詢的正確使用方法
      MySQL 表結(jié)構(gòu)升級:ALTER TABLE ADD COLUMN 語法詳解與最佳實(shí)踐
      国产成人精品亚洲日本在线_欧美精品v国产精品v_亚洲欧洲日韩国产一区二区三区_亚洲乱码一二三四区

      <address id="tjdjd"></address>
      <address id="tjdjd"></address>

        <address id="tjdjd"><nobr id="tjdjd"><progress id="tjdjd"></progress></nobr></address>

          <form id="tjdjd"><listing id="tjdjd"><meter id="tjdjd"></meter></listing></form>
          <address id="tjdjd"></address><address id="tjdjd"></address>
          亚洲午夜国产一区99re久久| 91精品国产综合久久久久久久久久| 中文字幕在线一区免费| 丝袜美腿亚洲色图| 在线观看日韩国产| 欧美三区免费完整视频在线观看| 亚洲特级片在线| 日韩电影在线一区二区| 26uuu亚洲综合色| 欧美日韩精品福利| 久久久久97国产精华液好用吗| 精品影院一区二区久久久| 国产成人免费在线| 欧美性色综合网| 日韩午夜在线影院| 精品对白一区国产伦| 久久精品一区蜜桃臀影院| 亚洲欧美另类久久久精品2019| 久久久精品影视| 免费美女久久99| 日韩欧美国产精品| 在线日韩国产精品| 国产精品青草久久| 欧美精品aⅴ在线视频| 国产精品嫩草久久久久| 欧美大胆人体bbbb| 91在线精品一区二区三区| 日本不卡免费在线视频| 国产成人av电影在线观看| 欧美午夜精品免费| 亚洲蜜臀av乱码久久精品| 伦理电影国产精品| 欧美日韩激情一区二区三区| 欧美体内she精视频| 精品奇米国产一区二区三区| 成人a免费在线看| 亚洲第一在线综合网站| 欧美α欧美αv大片| 国产99一区视频免费| 亚洲成人自拍网| 色综合色狠狠天天综合色| 国产传媒久久文化传媒| 欧美大度的电影原声| 成人一级黄色片| 成人免费毛片高清视频| 欧美在线看片a免费观看| 欧美一级淫片007| 中文字幕综合网| 亚洲另类中文字| 欧美精品一区二区在线播放| 盗摄精品av一区二区三区| 天天操天天干天天综合网| 久久精品一区二区三区不卡牛牛| 日韩高清国产一区在线| 精品福利av导航| 亚洲视频在线一区观看| 蜜桃精品视频在线观看| 日韩黄色在线观看| 成人午夜电影网站| 色悠久久久久综合欧美99| 国产麻豆视频精品| 欧美国产亚洲另类动漫| 久久激五月天综合精品| 欧美区视频在线观看| 欧美成人一区二区| 久久超级碰视频| 亚洲精品视频观看| 欧美优质美女网站| 日本网站在线观看一区二区三区| 性感美女极品91精品| 欧美人与禽zozo性伦| www.成人网.com| 日本aⅴ免费视频一区二区三区| 色狠狠一区二区| 久久婷婷国产综合国色天香| 欧美在线不卡一区| 国产喷白浆一区二区三区| 韩国精品久久久| 国产一区二区三区在线观看精品| 亚洲人成影院在线观看| 在线一区二区观看| 欧美日韩精品一区二区三区| 精品一区二区三区不卡| 亚洲欧美另类在线| 日韩成人免费看| 欧美日韩国产中文| 国产一区在线视频| 99久久免费国产| 在线观看91精品国产麻豆| 成人动漫av在线| 成人免费看视频| 欧美日韩国产首页| 欧美亚洲动漫制服丝袜| 韩国v欧美v亚洲v日本v| 93久久精品日日躁夜夜躁欧美| 久久99热这里只有精品| 国产精品剧情在线亚洲| 国产在线日韩欧美| 蜜桃视频在线观看一区| 国产中文一区二区三区| 国产一区二区网址| 亚洲欧美一区二区视频| 久久91精品久久久久久秒播| 国内久久精品视频| 国产传媒欧美日韩成人| 91精品国产全国免费观看| 韩国精品在线观看| 亚洲女厕所小便bbb| 久久九九久精品国产免费直播| 久久丝袜美腿综合| 亚洲香肠在线观看| 五月天国产精品| 婷婷六月综合亚洲| 无码av中文一区二区三区桃花岛| 亚洲一区在线观看视频| 亚洲一区在线观看网站| 欧美激情综合五月色丁香| 亚洲国产精品精华液2区45| 综合久久久久久| 成人免费毛片aaaaa**| 日韩一区二区三区在线视频| 日韩一二三区视频| 日韩国产一二三区| 一本一本大道香蕉久在线精品| 色婷婷国产精品综合在线观看| 欧美在线一二三四区| 亚洲午夜视频在线| 国产精品18久久久久| 亚洲综合一区二区精品导航| 欧美日韩国产123区| 91黄色免费观看| 不卡视频一二三四| 依依成人精品视频| 丝袜脚交一区二区| 亚洲另类在线一区| 亚洲私人黄色宅男| 678五月天丁香亚洲综合网| 欧美极品美女视频| 成人影视亚洲图片在线| 日韩电影在线一区| 亚洲精品一区在线观看| 一本大道av伊人久久综合| 中文字幕一区二区三区在线不卡| 国模娜娜一区二区三区| 色香蕉成人二区免费| 免费高清在线视频一区·| 欧美日韩国产成人在线91| 在线亚洲欧美专区二区| 91玉足脚交白嫩脚丫在线播放| 在线成人免费视频| 在线观看国产日韩| 99精品久久免费看蜜臀剧情介绍| 亚洲午夜免费福利视频| 精品久久久三级丝袜| 成人免费视频一区| 国产精品每日更新在线播放网址| 日韩欧美国产wwwww| 国产成人午夜99999| 在线成人免费视频| 精品福利视频一区二区三区| 亚洲一区二区三区三| 中文子幕无线码一区tr| 久久五月婷婷丁香社区| 丰满岳乱妇一区二区三区| 日韩视频免费观看高清在线视频| 亚洲乱码国产乱码精品精98午夜| 欧美高清一级片在线观看| 国产午夜精品在线观看| 亚洲一区精品在线| 久久久夜色精品亚洲| 欧美顶级少妇做爰| 色域天天综合网| 欧美日本韩国一区| 亚洲欧美国产高清| 亚洲乱码精品一二三四区日韩在线| 欧美激情一区在线观看| 亚洲女同女同女同女同女同69| 中文字幕制服丝袜一区二区三区| 在线观看亚洲专区| 成人白浆超碰人人人人| 成人性生交大片| 亚洲色图制服丝袜| 成人激情黄色小说| 日韩欧美一区二区免费| 欧美专区亚洲专区| 欧美色图激情小说| 精品成人私密视频| 欧美精品第一页| 亚洲国产精品久久人人爱蜜臀| 国产成人亚洲精品狼色在线| 日韩精品一区二区三区中文不卡| 波多野结衣在线aⅴ中文字幕不卡| 久久精品夜色噜噜亚洲a∨| 国产精品国产三级国产| 在线综合视频播放| 日韩毛片视频在线看| 国产午夜亚洲精品午夜鲁丝片| 国产精品青草综合久久久久99| 精品亚洲国产成人av制服丝袜| 日韩国产欧美在线观看|