Python操作MySQL(2)

查詢數據 使用execute()函數執行查詢sql語句後,得到的只是受影響的行數,並不能真正拿到我們查詢的內容。沒關係,這裏遊標cursor中還提供了三種提取數據的方法:fetchone、fetchmany、fetchall,每個方法都會導致遊標遊動,所以必須注意遊標的位置 cursor. fetchone() 獲取遊標所在處的一行數據,返回的是元組,沒有則返回None, cursor. fetchmany(size=None) 接收size條返回結果行。如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據。返回的結果是一個元組,元組的元素也是元組,由每行數據組成; cursor. fetchall() 接收全部的返回結果行。返回的結果是一個元組,元組的元素也是元組,由每行數據組成; 注意: 這些函數返回的結果數據均來自exceute()函數查詢的結果集。如果exceute()結果集中沒有數據,將會返回空元組。 fetchone示例 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() cursor.execute("select * from user") while 1: res = cursor.fetchone() if res is not None: print(res) else: break cursor.close() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 從execute()函數的查詢結果中取數據,以元組的形式返回遊標所在處的一條數據,如果遊標所在處沒有數據,將返回空元組,該數據執行一次,遊標向下移動一個位置。fetchone()函數必須跟exceute()函數結合使用,並且在exceute()函數之後使用 fetchmany示例 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() cursor.execute("select * from user") #此處取2條數據,返回一個包含2個元素的元組,元組的元素還是元組 resTuple = cursor.fetchmany(2) print(type(resTuple)) for v in resTuple: print(v) cursor.close() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 從exceute()函數結果中獲取遊標所在處的size條數據,並以元組的形式返回,元組的每一個元素都也是一個由一行數據組成的元組,如果size大於有效的結果行數,將會返回cursor.arraysize條數據,但如果遊標所在處沒有數據,將返回空元組。查詢幾條數據,遊標將會向下移動幾個位置。fetmany()函數必須跟exceute()函數結合使用,並且在exceute()函數之後使用 fetchall示例 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() cursor.execute("select * from user") resTuple = cursor.fetchall() print("共%s 條數據" %len(resTuple)) print(type(resTuple)) print(resTuple) cursor.close() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 獲取遊標所在處開始及以下所有的數據,並以元組的形式返回,元組的每一個元素都也是一個由一行數據組成的元組,如果遊標所在處沒有數據,將返回空元組。執行完這個方法後,遊標將移動到數據庫表的最後 更新數據 更新單條數據 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() res = cursor.execute("update user set name = 'hhq' where name = 'lucy0';") print("受影響的行數: ",res) cursor.execute("select * from user where name = 'hhq';") print(cursor.fetchone()) cursor.close() conn.commit() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 批量更新數據 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() sql = "update user set name = %s where name = %s;" res = cursor.executemany(sql,[("hhq1","lucy1"),("hhq2","lucy2")]) print("受影響的行數: ",res) cursor.execute("select * from user where name in ('hhq1','hhq2');") for i in cursor.fetchall(): print(i) cursor.close() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 刪除數據 刪除單條數據 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() sql = "delete from user where name = 'lucy17';" res = cursor.execute(sql) print("受影響的行數: ",res) cursor.close() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 批量刪除多條數據 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() sql = "delete from user where name = %s;" res = cursor.executemany(sql,[('lucy20',),('lucy21',)])#需要傳元組 print("受影響的行數: ",res) cursor.close() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 回滾事務 #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() cursor.execute("select * from user;") res = cursor.fetchall() print("更新前的數據: ",res[-1]) cursor.execute("update user set name = 'hhq'") cursor.execute("select * from user;") res1 = cursor.fetchall() print("更新後的數據: ",res1[-1]) #回滾事務 conn.rollback() cursor.execute("select * from user;") res1 = cursor.fetchall() print("回滾後的數據: ",res1[-1]) cursor.close() #提交事務 conn.commit() conn.close() except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) 重置遊標位置 scroll(value, mode='relative') 移動指針到參數value指定的行; Mode = relative則表示從當前所在行前移value行 Mode=absolute表示移動到絕對位置的value行。遊標索引從0開始 cursor.rownumber 返回當前遊標所在位置 示例: #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() cursor.execute("select * from user;") print("遊標當前位置:" ,cursor.rownumber) print(cursor.fetchone()) print("遊標當前位置:" ,cursor.rownumber) cursor.scroll(0,mode="absolute") print("遊標當前位置:" ,cursor.rownumber) cursor.fetchmany(2) print("遊標當前位置:" ,cursor.rownumber) except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1])) #encoding=utf-8 import pymysql try: conn = pymysql.connect( host = "127.0.0.1", port = 3306, user = "root", passwd = "123456" ) conn.select_db("pydb") cursor = conn.cursor() cursor.execute("select * from user;") print("遊標當前位置:" ,cursor.rownumber) res = cursor.fetchmany(2) print(res) print("遊標當前位置:" ,cursor.rownumber) cursor.scroll(3,mode="relative")#遊標會向前移動3,對應數據庫表就是向後移動3行 print("遊標當前位置:" ,cursor.rownumber) print(cursor.fetchone()) except pymysql.Error as e: print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章