今天實現了python對於數據庫的增刪改查工作:
具體的每一步的數據庫的增刪蓋茶自己都實驗過了。
掌握了基本的數據庫操作語言。然后就是對於tuple()的認識。
以及對於查詢語句中的:fetchone、fetchmany、fetchall
fetchone():獲取下一行數據,第一次為首行;
fetchall():獲取所有行數據源
fetchmany(4):獲取4行數據
默認情況下,我們獲取到的返回值是元組,只能看到每行的數據,卻不知道每一列代表的是什么,這個時候可以使用以下方式來返回字典,每一行的數據都會生成一個字典:
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #在實例化的時候,將屬性cursor設置為pymysql.cursors.DictCursor
在fetchone示例中,在獲取行數據的時候,可以理解開始的時候,有一個行指針指着第一行的上方,獲取一行,它就向下移動一行,所以當行指針到最后一行的時候,就不能再獲取到行的內容,所以我們可以使用如下方法來移動行指針:
cursor.scroll(1,mode='relative') # 相對當前位置移動
cursor.scroll(2,mode='absolute') # 相對絕對位置移動
第一個值為移動的行數,整數為向下移動,負數為向上移動,mode指定了是相對當前位置移動,還是相對於首行移動
具體自己實驗過得代碼如下:(代碼中的所有方法都經過測試可行)
#import pymysql #user = input('請輸入用戶名:') #pwd1 = input('請輸入密碼1:') #pwd2 = input('請輸入密碼2:') # 1.連接 #conn = pymysql.connect("localhost", "root", "511924", "student", charset='utf8') # 2.創建游標 #cursor = conn.cursor() # 2.創建游標 #cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 注意%s需要加引號 ###########################################對於查詢 #fetch數據類型關於默認獲取的數據是元祖類型,如果想要或者字典類型的數據 # 游標設置為字典類型 #cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #cursor.execute("select * from tb7") #row_1 = cursor.fetchone() #print(row_1)的結果為 {u'licnese': 213, u'user': '123', u'nid': 10, u'pass': '213'} ##############################################進行查詢的相關操作 #區間查詢 #sql = "select * from text where zhanghu ='%s' and sex between '%s' and '%s'" % (user, pwd1,pwd2) #多條件查詢 #sql = "select * from text where zhanghu ='%s' and sex='%s'" % (user, pwd1) # 3.執行sql語句 #result = cursor.execute(sql) # 執行sql語句,返回sql查詢成功的記錄數目 #print(result) # 獲取剩余結果的第一行數據 #row_1 = cursor.fetchone() #print(row_1)#z只能通過row_1[1]等輸出各項 # 獲取剩余結果前n行數據 # row_2 = cursor.fetchmany(3) # 獲取剩余結果所有數據 # row_3 = cursor.fetchall() #row_3 = cursor.fetchall() #print(row_3[1][2]) # 關閉連接,游標和連接都要關閉 #cursor.close() #conn.close() #if result: # print('登陸成功') #else: # print('登錄失敗') #########################################################進行數據的增加 #a1=input("輸入姓名") #a2=input("輸入密碼") #((a1,a2),("dazhi666","88"))與[(a1,a2),("dazhi666","88")]都可以 #也可以使用sql和tuple(valuesList)進行操作 #effect_row = cursor.executemany("insert into text(zhanghu,sex)values(%s,%s)", ((a1,a2),("dazhi666","88"))) #print(effect_row) #conn.commit() #cursor.close() #conn.close() #獲取最后一個的自增id #new_id = cursor.lastrowid #print (new_id) ###################################################################數據庫修改 #q1=input("shuru1") #q2=input("shuru2") #sql = "update text set zhanghu = %s where sex = %s" #effect_row = cursor.execute(sql,(q1,q2)) #print(effect_row) # 一定記得commit #conn.commit() # 4.關閉游標 #cursor.close() # 5.關閉連接 #conn.close() #################################################################數據庫刪除 #wen=input("shuru") #wen2=input("shurud") #sql = "delete from text where sex = %s" #sql = "delete from text where sex between %s and %s" #effect_row = cursor.execute(sql,(wen,wen2)) #print(effect_row) # 一定記得commit #conn.commit() # 4.關閉游標 #cursor.close() # 5.關閉連接 #conn.close() ######################################################################查詢操作的字典行為 #sql = 'select * from text' #cursor.execute(sql) # 查詢第一行的數據 #row = cursor.fetchone() #print(row) #print(row["zhanghu"])輸出某一個元素的值 # 查詢第二行數據 #row = cursor.fetchone() #print(row) #cursor.scroll(-1, mode='relative') # 設置之后,光標相對於當前位置往前移動了一行,所以打印的結果為第二行的數據 #row = cursor.fetchone() #print(row) #cursor.scroll(0, mode='absolute') # 設置之后,光標相對於首行沒有任何變化,所以打印的結果為第一行數據 #row = cursor.fetchone() #print(row) # 4.關閉游標 #cursor.close() # 5.關閉連接 #conn.close()