Python操作MySQL數據庫


Python程序操作MySQL數據庫

安裝pymysql第三方包:

sudo pip3 install pymysql

說明:

  • 安裝命令使用 sudo pip3 install 第三方包名
  • 卸載命令使用 sudo pip3 uninstall 第三方包
  • 大家現在使用的虛擬機已經安裝了這個第三方包,可以使用: pip3 show pymysql 命令查看第三方包的信息
  • pip3 list 查看使用pip命令安裝的第三方包列表

pymysql的使用:

  1. 導入 pymysql 包

     import pymysql 
  2. 創建連接對象

    調用pymysql模塊中的connect()函數來創建連接對象,代碼如下:

     conn=connect(參數列表)
    
     * 參數host:連接的mysql主機,如果本機是'localhost' * 參數port:連接的mysql主機的端口,默認是3306 * 參數user:連接的用戶名 * 參數password:連接的密碼 * 參數database:數據庫的名稱 * 參數charset:通信采用的編碼方式,推薦使用utf8 

    連接對象操作說明:

    • 關閉連接 conn.close()
    • 提交數據 conn.commit()
    • 撤銷數據 conn.rollback()
  3. 獲取游標對象

    獲取游標對象的目標就是要執行sql語句,完成對數據庫的增、刪、改、查操作。代碼如下:

     # 調用連接對象的cursor()方法獲取游標對象   
     cur =conn.cursor()

     

    游標操作說明:

    • 使用游標執行SQL語句: execute(operation [parameters ]) 執行SQL語句,返回受影響的行數,主要用於執行insert、update、delete、select等語句
    • 獲取查詢結果集中的一條數據:cur.fetchone()返回一個元組, 如 (1,'張三')
    • 獲取查詢結果集中的所有數據: cur.fetchall()返回一個元組,如((1,'張三'),(2,'李四'))
    • 關閉游標: cur.close(),表示和數據庫操作完成
  4. pymysql完成數據的查詢操作

    import pymysql
    
    # 創建連接對象
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python', charset='utf8')
    
    # 獲取游標對象
    cursor = conn.cursor()
    
    # 查詢 SQL 語句
    sql = "select * from students;"
    # 執行 SQL 語句 返回值就是 SQL 語句在執行過程中影響的行數
    row_count = cursor.execute(sql)
    print("SQL 語句執行影響的行數%d" % row_count)
    
    # 取出結果集中一行數據, 例如:(1, '張三')
    # print(cursor.fetchone())
    
    # 取出結果集中的所有數據, 例如:((1, '張三'), (2, '李四'), (3, '王五'))
    for line in cursor.fetchall():
        print(line)
    
    # 關閉游標
    cursor.close()
    
    # 關閉連接
    conn.close()

     

  5. pymysql完成對數據的增刪改

    import pymysql
    
    # 創建連接對象
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='mysql',database='python', charset='utf8')
    
    # 獲取游標對象
    cursor = conn.cursor()
    
    try:
        # 添加 SQL 語句
        # sql = "insert into students(name) values('劉璐'), ('王美麗');"
        # 刪除 SQ L語句
        # sql = "delete from students where id = 5;"
        # 修改 SQL 語句
        sql = "update students set name = '王鐵蛋' where id = 6;"
        # 執行 SQL 語句
        row_count = cursor.execute(sql)
        print("SQL 語句執行影響的行數%d" % row_count)
        # 提交數據到數據庫
        conn.commit()
    except Exception as e:
        # 回滾數據, 即撤銷剛剛的SQL語句操作
        conn.rollback()
    
    # 關閉游標
    cursor.close()
    
    # 關閉連接
    conn.close()

     

    說明:

    • conn.commit() 表示將修改操作提交到數據庫
    • conn.rollback() 表示回滾數據
  6. 防止SQL注入

    什么是SQL注入?

    用戶提交帶有惡意的數據與SQL語句進行字符串方式的拼接,從而影響了SQL語句的語義,最終產生數據泄露的現象。

    如何防止SQL注入?

    SQL語句參數化

    • SQL語言中的參數使用%s來占位,此處不是python中的字符串格式化操作
    • 將SQL語句中%s占位所需要的參數存在一個列表中,把參數列表傳遞給execute方法中第二個參數

    防止SQL注入的示例代碼:

    from pymysql import connect
    
    def main():
    
        find_name = input("請輸入物品名稱:")
    
        # 創建Connection連接
        conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
        # 獲得Cursor對象
        cs1 = conn.cursor()
    
        # 非安全的方式
        # 輸入 ' or 1 = 1 or '   (單引號也要輸入)
        # sql = "select * from goods where name='%s'" % find_name
        # print("""sql===>%s<====""" % sql)
        # # 執行select語句,並返回受影響的行數:查詢所有數據
        # count = cs1.execute(sql)
    
        # 安全的方式
        # 構造參數列表
        params = [find_name]
        # 執行select語句,並返回受影響的行數:查詢所有數據
        count = cs1.execute("select * from goods where name=%s", params)
        # 注意:
        # 如果要是有多個參數,需要進行參數化
        # 那么params = [數值1, 數值2....],此時sql語句中有多個%s即可
        # %s 不需要帶引號
    
        # 打印受影響的行數
        print(count)
        # 獲取查詢的結果
        # result = cs1.fetchone()
        result = cs1.fetchall()
        # 打印查詢的結果
        print(result)
        # 關閉Cursor對象
        cs1.close()
        # 關閉Connection對象
        conn.close()
    
    if __name__ == '__main__':
        main()

     

    說明:

    • execute方法中的 %s 占位不需要帶引號

3. 小結

  1. 導包

     import pymysql 
  2. 創建連接對象

     pymysql.connect(參數列表)
    
  3. 獲取游標對象

     cursor =conn.cursor()
    
  4. 執行SQL語句

     row_count = cursor.execute(sql)
    
  5. 獲取查詢結果集

     result = cursor.fetchall()
    
  6. 將修改操作提交到數據庫

     conn.commit()
    
  7. 回滾數據

     conn.rollback()
    
  8. 關閉游標

     cursor.close()
    
  9. 關閉連接

     conn.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM