pymysql python mysql db.selectAll查询时,一直返回执行时的数据不会返回新数据,解决办法 本文共有4550个字,关键词: python mysql操作类。原代码。这个库之前一直在使用没有任何问题,但是在一次特定的环境中使用时,发现无法正常返回数据。 需求需要返回最新的一条数据进行处理,但是最终得到的结果是一直只返回执行python代码时拿到的第一条数据。即使有新数据进来也不会变化。非常奇怪,后来通过搜索发现需要增加。 ``` self.conn.autocommit(True) ``` 这一行代码解决。有点搞不明白怎么回事。有知道的留言下谢谢。 完整代码如下: ``` # python mysql 操作类 import pymysql import config class DBHelper: def __init__(self, db): # 构造函数 try: self.conn = pymysql.connect(host=db['HOST'], port=db['PORT'], user=db['USER'], passwd=db['PASSWD'], database=db['DB'], charset=db['CHARSET']) self.cursor = self.conn.cursor() self.conn.autocommit(True) except Exception as e: print(e) # 返回执行execute()方法后影响的行数 def execute(self, sql): self.cursor.execute(sql) rowcount = self.cursor.rowcount return rowcount # 删除并返回影响行数 def delete(self, **kwargs): table = kwargs['table'] where = kwargs['where'] sql = 'DELETE FROM %s where %s' % (table, where) print(sql) try: # 执行SQL语句 self.cursor.execute(sql) # 提交到数据库执行 self.conn.commit() # 影响的行数 rowcount = self.cursor.rowcount except: # 发生错误时回滚 self.conn.rollback() return rowcount # 新增并返回新增ID def insert(self, **kwargs): table = kwargs['table'] del kwargs['table'] sql = 'insert into %s(' % table fields = "" values = "" for k, v in kwargs.items(): fields += "%s," % k values += "'%s'," % v fields = fields.rstrip(',') values = values.rstrip(',') sql = sql + fields + ")values(" + values + ")" print(sql) try: # 执行SQL语句 self.cursor.execute(sql) # 提交到数据库执行 self.conn.commit() # 获取自增id res = self.cursor.lastrowid except: # 发生错误时回滚 self.conn.rollback() return res # 修改数据并返回影响的行数 def update(self, **kwargs): table = kwargs['table'] # del kwargs['table'] kwargs.pop('table') where = kwargs['where'] kwargs.pop('where') sql = 'update %s set ' % table for k, v in kwargs.items(): sql += "%s='%s'," % (k, v) sql = sql.rstrip(',') sql += ' where %s' % where print(sql) try: # 执行SQL语句 self.cursor.execute(sql) # 提交到数据库执行 self.conn.commit() # 影响的行数 rowcount = self.cursor.rowcount except: # 发生错误时回滚 self.conn.rollback() return rowcount # 查-一条条数据 def selectTopone(self, **kwargs): table = kwargs['table'] field = 'field' in kwargs and kwargs['field'] or '*' where = 'where' in kwargs and 'where ' + kwargs['where'] or '' order = 'order' in kwargs and 'order by ' + kwargs['order'] or '' sql = 'select %s from %s %s %s limit 1' % (field, table, where, order) # print(sql) try: # 执行SQL语句 self.cursor.execute(sql) # 使用 fetchone() 方法获取单条数据. data = self.cursor.fetchone() except: # 发生错误时回滚 self.conn.rollback() data = "error" return data # 查所有数据 def selectAll(self, **kwargs): table = kwargs['table'] field = 'field' in kwargs and kwargs['field'] or '*' where = 'where' in kwargs and 'where ' + kwargs['where'] or '' order = 'order' in kwargs and 'order by ' + kwargs['order'] or '' sql = 'select %s from %s %s %s ' % (field, table, where, order) # print(sql) try: # 执行SQL语句 self.cursor.execute(sql) # 使用 fetchone() 方法获取单条数据. data = self.cursor.fetchall() except: # 发生错误时回滚 self.conn.rollback() data = "error" return data # 查所有数据 def rawSelectAll(self, sql): try: # 执行SQL语句 self.cursor.execute(sql) # 使用 fetchone() 方法获取单条数据. data = self.cursor.fetchall() except: # 发生错误时回滚 self.conn.rollback() data = "error" return data #作为模块被调用时自动运行 if __name__ == 'mysql3': db = DBHelper(config.config) ``` × yihong (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 码农心得,数据库,Python 2023-04-06 评论 1339 次浏览