pymysql之cur.fetchall() 和cur.fetchone()用法詳解
我就廢話不多說了,大家還是直接看代碼吧!
import pymysql,hashlib 結(jié)果:單條結(jié)果 {'id': 1, 'name': '打車', 'phone': '132453'} sql = 'select * from zxj' def op_mysql(sql,many=True): db_info = {'user': 'jxz', 'password': '123456', 'host': '118*******', 'db': 'jxz', 'port': 3306, 'charset': 'utf8', 'autocommit': True} conn = pymysql.connect(**db_info) # 建立連接 cur = conn.cursor(pymysql.cursors.DictCursor) # 游標 cur.execute(sql) # 執(zhí)行sql語句,insert 、update 、delete if many: result = cur.fetchall() print('多條',result) else: result = cur.fetchone() # {''} print('dantiao',result) cur.close() conn.close() return result op_mysql(sql,many=False) # 傳入sql, 默認為true ================================= md5加鹽2 def md5(s,salt=''): new_s = str(s) + salt m = hashlib.md5(new_s.encode()) return m.hexdigest()```
補充知識:python pymssql使用時,使用fetchone獲取的值怎么在while里操作多條數(shù)據(jù)
項目描述:
想把status狀態(tài)為1的數(shù)據(jù)查出來然后再通過while 遍歷update 數(shù)據(jù),為了清楚測試時候的數(shù)據(jù)。
剛開始的代碼是這樣的。
#coding:utf-8 import pymssql def connect(): connect=pymssql.connect((‘x.x.x.x'),‘x',‘x',‘x') cursor = connect.cursor() # 創(chuàng)建游標 sql001='select *from xxxxx where xxxxx=273and Status=1 order by sysno desc'#查詢語句 cursor.execute(sql001) row=cursor.fetchone()#讀取查詢結(jié)果 print(row) if row==None: print("沒有查到數(shù)據(jù)") else: while row: print("sysno=%s" % (row[0])) cursor.execute("update xxxxx set Status=-1 where SysNo=%d", row[0]) # 執(zhí)行語句\ connect.commit() print(row) #cursor.execute(sql001) row=cursor.fetchone() #print(row) connect()
報錯信息:
File “D:/JiCaiZhuanTi/Case/test.py”, line 22, in connect
row=cursor.fetchone()
File “src\pymssql.pyx”, line 507, in pymssql.Cursor.fetchone
pymssql.OperationalError: Statement not executed or executed statement has no resultset
自己查了不少文章,以前沒有對這塊有所涉及,因為本人是菜鳥,用到哪就看到哪。也仔細看了fetchone() 、fetchall() 還有pymssql的對數(shù)據(jù)庫的基本炒作??戳撕镁迷谧詈箪`光一閃理解錯誤在哪里了。
錯誤出在while里的connect.commit()后直接又row=cursor.fetchone()而while里是(返回單個的元組,也就是一條記錄(row),如果沒有結(jié)果 則返回 None)因為我上一個查詢是update語句,更新sql語句不會返回resultset,所以會報錯。
然后我就這樣改了一下,:
while row: print(“sysno=%s” % (row[0])) cursor.execute(“update xxxxx set Status=-1 where SysNo=%d”, row[0]) # 執(zhí)行語句 connect.commit() print(row) cursor.execute(sql001) row=cursor.fetchone()
在獲取sql執(zhí)行獲取結(jié)果的 row=cursor.fetchone()我再去調(diào)用一次查詢再次獲取想要的數(shù)據(jù)。
我覺得應(yīng)該有更好的辦法,就是再第一次獲取查詢結(jié)果把所需要的sysno都拿出來,然后再while,這樣可以減少對數(shù)據(jù)庫的調(diào)用。
目前還沒有寫出來代碼,不知道思路對不對,大家可以留言討論下。
以上這篇pymysql之cur.fetchall() 和cur.fetchone()用法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python中操作mysql的pymysql模塊詳解
- Python中模塊pymysql查詢結(jié)果后如何獲取字段列表
- Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解
- 在python中使用pymysql往mysql數(shù)據(jù)庫中插入(insert)數(shù)據(jù)實例
- Python使用pymysql從MySQL數(shù)據(jù)庫中讀出數(shù)據(jù)的方法
- python使用pymysql實現(xiàn)操作mysql
- pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明
- 詳解使用pymysql在python中對mysql的增刪改查操作(綜合)
- Python中pymysql 模塊的使用詳解
- 封裝一個python的pymysql操作類
相關(guān)文章
python數(shù)據(jù)處理之Pandas類型轉(zhuǎn)換的實現(xiàn)
本文主要介紹了python數(shù)據(jù)處理之Pandas類型轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04python字典如何獲取最大和最小value對應(yīng)的key
這篇文章主要介紹了python字典如何獲取最大和最小value對應(yīng)的key問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11