"""
問題:
如何能在python中去使用數據庫存取數據?
使用pymysql模塊
"""
import pymysql
"""pymysql使用步驟
核心類 Connect鏈接用 和Cursor讀寫用
1.與數據庫服務器建立鏈接
2.獲取游標對象 (用於發送和接收數據)
3.用游標執行sql語句
4.使用fetch方法來獲取執行的結果
5.關閉鏈接 先關游標 再關鏈接
游標的常用方法
1.創建游標 conn.cursor(指定查詢結果的數據類型)
2.excute 執行sql
3.fetchone(當sql只有一條記錄時) many(sql有多條並且需要指定條數) all(多條)
4.scroll 用於修改游標的當前位置
注意: pymysql 默認不提交修改 但是注意(指的是對表中記錄的操作不提交) 像刪庫 刪表 是無法撤銷的
"""
# 創建鏈接得到一個鏈接對象
conn = pymysql.Connect(
host="127.0.0.1", # 數據庫服務器主機地址
user="root", # 用戶名
password="admin", # 密碼
database="day42", #數據庫名稱
port=3306, # 端口號 可選 整型
charset="utf8" # 編碼 可選
)
# 獲取游標對象 pymysql.cursors.DictCursor指定 返回的結果類型 為字典 默認是元祖類型
cursor = conn.cursor(pymysql.cursors.DictCursor)
# 查詢數據
sql = "select *from emp"
# 執行sql 如果是select 語句返回的是 查詢的條數
res = cursor.execute(sql)
print(res)
# 獲取查詢的結果
# print(cursor.fetchall())
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchmany(1))
# print(cursor.fetchall())
# scroll
print(cursor.fetchone())
cursor.scroll(-1)
print(cursor.fetchall())
# 關閉鏈接
cursor.close()
conn.close()
#########################################################################################
#########################################################################################
## commit 提交確認
##roback 回滾 就是返回上一步操作的結果
import pymysql
# 創建鏈接得到一個鏈接對象
conn = pymysql.Connect(
host="127.0.0.1", # 數據庫服務器主機地址
user="root", # 用戶名
password="admin", # 密碼
database="day42", #數據庫名稱
port=3306, # 端口號 可選 整型
charset="utf8" # 編碼 可選
)
# 獲取游標對象 pymysql.cursors.DictCursor指定 返回的結果類型 為字典 默認是元祖類型
cursor = conn.cursor(pymysql.cursors.DictCursor)
# # 添加數據
# res = cursor.execute("insert into emp values(100,'胡歌','男',30,1,'job',60000)")
# if res:
# print("插入成功")
# else:
# print("插入失敗")
# 提交修改 因為pymysql 模塊默認是啟用事務的 你的sql語句 如果不提交 相當於沒有執行
# conn.commit()
# res = cursor.execute("drop database day42")
# res = cursor.execute("delete from t1 where id = 1")
# print(res)
try:
cursor.execute("update moneyTable set money = money - 50 where name = '小明'")
#如果小花的賬戶出問題了 無法更新數據 那就需要回滾
cursor.execute("update moneyTable set money = money + 50 where name = '小花'")
conn.commit()
except:
conn.rollback()
cursor.close()
conn.close()
# 小明有100塊 准備給小花轉50
# update moneyTable set money = money - 50 where name = "小明";
# 發生一些別錯誤 如果發生了錯誤 就執行撤銷操作 rollback;
# update moneyTable set money = money + 50 where name = "小花";