MySQL與Python的互動學習筆記

neuyu發表於2021-09-09

MySQL Connector

官方的驅動模組,相容性好

建立連線

1、import mysql.connector

    con=mysql.connector.connect(

    host="localhost",port="3306",

    user = 'root',password="abc1",

    database="demo");

2、import mysql.connector

    config={

    "host":"localhost",

    "port":3306,

    "user" :'root',

    "password":"abc1",

    "database":"demo"};

con=mysql.connector.connect(**config)

利用遊標來執行SQL語句,而查詢的結果集也儲存在遊標中

cursor=con.cursor()

cursor.execute(sql語句)

SQL語句是解釋型語言,拼接SQL語句的時候,容易被注入惡意的SQL語句。

SQL預編譯機制

預編譯就是將資料庫提前把SQL語句編譯成二進位制,反覆執行童一條SQL語句的效率就會提高。

SQL語句被編譯後,傳入引數都被當做字串處理,資料庫不會解釋注入SQL語句。

防注入

sql="SELECT COUNT(*) FROM t_user WHERE username=%s AND AES_DECRYPT(UNHEX(password),‘helloword’)=%s";

cursor.execute(sql,(username,password));

print(cursor.fetchone()[0])

事務控制

con.start_transaction([事務的隔離級別])

con.commit()

con.rollback()

異常處理

try:

    ......

except Exception as e:

    ..[con.rollback()]

finally:

    if "con" in dir():con.close()

資料庫最昂貴的是資料庫連線,併發尤為突出

TCP連線需要三次握手,四次回首,然後資料庫還要驗證使用者資訊。

資料庫連線池:預先建立一些資料庫連線,然後快取,避免程式語言反覆建立

import mysql.connector.pooling

config={...}

pool=mysql.connector.pooling.MySQLConnectionPool(**config,pool_size=10)

con=pool.get_connection()

EXECUTEMANY()函式可以反覆執行一條SQL語句。

cursor.executemany(sql,data)

create table t_emp_new AS (select * from t_emp)複製資料表

create table t_emp_new like t_emp 複製資料表結構(內容空)

cursor.fetchall() 查出全部資料




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2824519/,如需轉載,請註明出處,否則將追究法律責任。

相關文章