1. 程式人生 > >PyMySQL連結MySQL的一些事務操作

PyMySQL連結MySQL的一些事務操作

1.在資料庫建立一張待操作表

# 匯入pymysql模組
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
# 定義要執行的SQL語句
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8;
""" # 執行SQL語句 cursor.execute(sql) # 關閉游標物件 cursor.close() # 關閉資料庫連線 conn.close()
View Code
# 匯入pymysql模組(返回字典格式資料)
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句並且將結果作為字典返回的遊標
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定義要執行的SQL語句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL )ENGINE=innodb DEFAULT CHARSET=utf8; """ # 執行SQL語句 cursor.execute(sql) # 關閉游標物件 cursor.close() # 關閉資料庫連線 conn.close()
View Code

2.向已建立的表中增加資料

# 匯入pymysql模組
import pymysql # 連線database conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”) # 得到一個可以執行SQL語句的游標物件 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "Alex" age = 18 # 執行SQL語句 cursor.execute(sql, [username, age]) # 提交事務 conn.commit() cursor.close() conn.close()
View Code
# 匯入pymysql模組(在這裡也可以加入事務回滾機制)
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
username = "Alex"
age = 18
try:
    # 執行SQL語句
    cursor.execute(sql, [username, age])
    # 提交事務
    conn.commit()
except Exception as e:
    # 有異常,回滾事務
    conn.rollback()
cursor.close()
conn.close()
View Code
# 匯入pymysql模組(獲取當前寫入資料id,關聯操作時會用到)
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
username = "Alex"
age = 18
try:
    # 執行SQL語句
    cursor.execute(sql, [username, age])
    # 提交事務
    conn.commit()
    # 提交之後,獲取剛插入的資料的ID
    last_id = cursor.lastrowid
except Exception as e:
    # 有異常,回滾事務
    conn.rollback()
cursor.close()
conn.close()
View Code
# 匯入pymysql模組(批量執行)
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)]
try:
    # 批量執行多條插入SQL語句
    cursor.executemany(sql, data)
    # 提交事務
    conn.commit()
except Exception as e:
    # 有異常,回滾事務
    conn.rollback()
cursor.close()
conn.close()
View Code

3.刪除表中的資料

# 匯入pymysql模組
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
sql = "DELETE FROM USER1 WHERE id=%s;"
try:
    cursor.execute(sql, [4])
    # 提交事務
    conn.commit()
except Exception as e:
    # 有異常,回滾事務
    conn.rollback()
cursor.close()
conn.close()
View Code

4.修改表中的資料

# 匯入pymysql模組
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
# 修改資料的SQL語句
sql = "UPDATE USER1 SET age=%s WHERE name=%s;"
username = "Alex"
age = 80
try:
    # 執行SQL語句
    cursor.execute(sql, [age, username])
    # 提交事務
    conn.commit()
except Exception as e:
    # 有異常,回滾事務
    conn.rollback()
cursor.close()
conn.close()
View Code

5.查看錶中的資料

# 匯入pymysql模組
import pymysql
# 連線database
conn = pymysql.connect(host=“你的資料庫地址”, user=“使用者名稱”,password=“密碼”,database=“資料庫名”,charset=“utf8”)
# 得到一個可以執行SQL語句的游標物件
cursor = conn.cursor()
# 查詢資料的SQL語句
sql = "SELECT id,name,age from USER1 WHERE id=1;"
# 執行SQL語句
cursor.execute(sql)
# 獲取單條查詢資料
ret = cursor.fetchone()
cursor.close()
conn.close()
# 列印下查詢結果
print(ret)
View Code

6.擴充套件用法和注意事項

# 可以獲取指定數量的資料
cursor.fetchmany(3)
# 游標按絕對位置移動1
cursor.scroll(1, mode="absolute")
# 游標按照相對位置(當前位置)移動1
cursor.scroll(1, mode="relative")

SQL注入問題
    1. SQL語句在程式中是字串,動態拼接的字串,不要拿使用者輸入的內容去拼接字串
    2. 不要自己拼接字串
View Code