我用的python3,可以使用mysql模塊和pymsql模塊,但是mysql.connector總是報錯,體驗非常差,
所以我用的是pymysql:
一般步驟爲:
1.創建連接
2.獲得光標對象
3.執行SQL語句
4.自己發揮的內容
5.關閉光標和連接對象
先看一下我們訪問的表:
下面是代碼;
import pymysql
#首先是打開數據庫,這裏注意參數要以鍵值對的形式寫出,否則總是報錯
mydb=pymysql.connect(
host="localhost",
port=3310,
user= "root",
passwd="root",
db="pdbc-db",
charset="utf8")
#創建遊標,設置操作爲字典類型,fetchall返回的,是一個嵌套着字典的列表,字典的鍵即爲列名稱
#[{'id': 123456, 'songname': "'you belong with me'", 'authorname': "'taylor swift'", #'time': 3},
#{'id': 123457, 'songname': "'22'", 'authorname': "'taylor swift'", 'time': 2},
#{'id': 123458, 'songname': "'marry you'", 'authorname': "'bruno mars'", 'time': 3}]
cursor=mydb.cursor(cursor=pymysql.cursors.DictCursor)
#一般的創建遊標,fetchall返回的是一個元組(內部還要嵌套元組)
#((123456, "'you belong with me'", "'taylor swift'", 3),
#(123457, "'22'", "'taylor swift'", 2),
#(123458, "'marry you'", "'bruno mars'", 3))
#cursor=mydb.cursor()
#執行SQL語句
try:
cursor.execute("select * from music ")# 返回的值是受影響數據的條數
#用fetchall返回全部結果,然後自己遍歷這個全部結果
resultset=cursor.fetchall()
print(resultset)
for row in resultset:
print(row)
# fetchone獲取單個(下一個)結果行,我覺得一般在SQL語句返回值爲單一語句時使用它,
# 再或者是你有特殊的需求只看一行數據的時候使用它
row=cursor.fetchone()
print(row)
# fetchmany():應該是返回從第一行開始的第幾行數據,如果你輸入的函數大於總行數也不會報錯,只是返
#回所有數據
reult = cursor.fetchmany(5)
print(reult)
cursor.scroll(1, 'absolute') # 絕對移動:相對於文件起始位置,向後移動一組數據
cursor.scroll(1,'relative') # 相對移動,相對於當前位置,向後移動一個位置
cursor.scroll(-1) # 遊標 相對移動到當前位置的前一條數據位置
#rowcount: 這是一個只讀屬性,並返回執行execute()方法後影響的行數。
#.commit():提交到數據庫執行,增和改單單執行excute並不會真正影響到數據,需要再執行.commit()才
#可以完成真正的增改
except:
mydb.rollback()#當有兩個或多個操作因其他原因只完成部分操作而未能執行完全部操作導致的數據不安
#全問題,可以對錶數據中的增改進行撤銷處理。
cursor.close()
mydb.close()