Pymysql cur.fetchall() 返回 None

大家在pymysqlcur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None,可能是由于以下多种问题导致的。

在这里插入图片描述

1、问题背景

在使用 Pymysql 库连接到 MySQL 数据库时,遇到这样的问题:

  • 在一个线程中,使用 cur.fetchall() 方法查询数据库中的表名列表,并在循环中不断刷新这个列表。
  • 然后,在另一个线程中,使用相同的数据库连接创建了一些新的表。
  • 预期在下一个循环中,cur.fetchall() 方法应该返回一个包含所有表名的元组,其中应该包括新创建的表。
  • 但实际上,cur.fetchall() 方法却返回了 None

2、解决方案

这个问题的原因在于,当我创建新表时,没有显式地提交事务。导致没有将创建表的更改持久化到数据库中。因此,当我在另一个线程中使用 cur.fetchall() 方法查询表名列表时,新创建的表还没有被提交到数据库中,所以无法被查询到。

为了解决这个问题,需要在创建新表后显式地提交事务。这可以通过调用 conn.commit() 方法来实现。这样就可以将创建表的更改持久化到数据库中,并在下一个循环中使用 cur.fetchall() 方法查询到新创建的表。

以下是修改后的代码:

# 在创建新表后,显式地提交事务
conn.commit()

修改后的代码如下:

def create_flight(self):# *********************************************************************************************# * Create new flight table                                                                   *# *********************************************************************************************if self.sql_write.get():# ********************************************# * Try to connect message                   *# ********************************************self.printLog(self.lbl_sql_write, self.LANG['tryCreateTable'], 'normal')logging.info('Creating table for flight tracking...')# ********************************************# * Create name tables                       *# ********************************************event = self.oprSett['mysql']['event']now = str(int(time.time()))mainName = "tbl_%s_%s_" % (event, now)trackingTable = mainName + "flighttrack"logging.debug('Name of tracking table: %s', trackingTable)unitsTable = mainName + "units"logging.debug('Name of units table: %s', unitsTable)headerTable = mainName + "header"logging.debug('Name of header table: %s', headerTable)# ********************************************# * Read SQL parameter                       *# ********************************************logging.debug('Reading CSV file for table structure...')csvFile = "config/newFlight.csv"try:sqlCsv = csv.reader(open(csvFile, 'rb'),delimiter = ',',quotechar = '"',quoting = csv.QUOTE_ALL)except:msg = csvFilemsg += "\n\n"msg += self.LANG['e13']tkMessageBox.showerror("Error 13", msg)self.printLog(self.lbl_sql_write, self.LANG['e13'], 'error')logging.error('File not found!')#print "[Error 13] " + self.LANG['e13']return 0# Transfer data from CSV file into own listsqlVars = []for row in sqlCsv:if len(row) == 4 and row[0][0] != "#": # No commentsqlVars.append(row)# *************************************************# * Create SQL statement to create tracking table *# *************************************************# Head for creating new tablesql = "CREATE TABLE IF NOT EXISTS `%s` (\n" % trackingTablesql += "  `ID` int(11) NOT NULL AUTO_INCREMENT,\n" # Becomes primary key# Parse SQL variables from CSV filefor row in sqlVars:if len(row[2]) > 0:                # Data type requires lengthsql += "  `%s` %s(%s) NOT NULL COMMENT '%s',\n" % (row[0], row[1], row[2], row[3])else:                              # Data type not requires lengthsql += "  `%s` %s NOT NULL COMMENT '%s',\n" % (row[0], row[1], row[3])# Footer of SQL statement for creating new tablesql += "  PRIMARY KEY (`ID`)\n"sql += ") ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=0;\n"sql += "\n"# In debug mode print SQL statement to console#logging.debug('SQL statement to create tracking table:\n%s', sql)# **********************************************# * Create SQL statement to create units table *# **********************************************# Head for creating new tablesql += "CREATE TABLE IF NOT EXISTS `%s` (\n" % unitsTablesql += "  `ID` int(11) NOT NULL AUTO_INCREMENT,\n"                # Becomes primary keysql += "  `Dataref` varchar(10) COLLATE latin1_german1_ci NOT NULL,\n"sql += "  `Unit` varchar(10) COLLATE latin1_german1_ci NOT NULL,\n"sql += "  PRIMARY KEY (`ID`)\n"sql += ") ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 ;\n"sql += "\n"# Parse SQL variables from CSV filefor row in sqlVars:# Insert units in tbl_unitssql += "INSERT INTO %s VALUES ('', '%s', '%s');\n" % (unitsTable, row[0], row[3])sql += "\n"# In debug mode print SQL statement to console#logging.debug('SQL statement to create units table:\n%s', sql)# ***********************************************# * Create SQL statement to create header table *# ***********************************************# Head for creating new tablesql += "CREATE TABLE IF NOT EXISTS `%s` (\n" % headerTable#sql += "  `ID` int(11) NOT NULL AUTO_INCREMENT,\n"                # Becomes primary keysql += "  `Parameter` char(21) COLLATE latin1_german1_ci NOT NULL,\n"sql += "  `Value` varchar(100) COLLATE latin1_german1_ci NOT NULL,\n"sql += "  PRIMARY KEY (`Parameter`)\n"sql += ") ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 ;\n"sql += "\n"# IGC syntax from: http://carrier.csi.cam.ac.uk/forsterlewis/soaring/igc_file_format/igc_format_2008.html# Adding header parameters, some values are coming latersql += "INSERT INTO %s VALUES ('AXXX001', '');\n"                        % (headerTable)                     # Manufacturer codesql += "INSERT INTO %s VALUES ('HFFXA', '035');\n"                       % (headerTable)                     # Fix accuracysql += "INSERT INTO %s VALUES ('HFDTE', '');\n"                          % (headerTable)                     # UTC date of flightsql += "INSERT INTO %s VALUES ('HFPLTPILOT', '');\n"                     % (headerTable)                     # Pilots namesql += "INSERT INTO %s VALUES ('HFGTYGLIDERTYPE', 'KA8B');\n"            % (headerTable)                     # Glider typesql += "INSERT INTO %s VALUES ('HFGIDGLIDERID', 'D1389');\n"             % (headerTable)                     # Glider callsignsql += "INSERT INTO %s VALUES ('HFDTM100DATUM', 'WGS-1984');\n"          % (headerTable)                     # GPS datumsql += "INSERT INTO %s VALUES ('HFGPSGPS', 'X-PLANE 10');\n"             % (headerTable)                     # Manufacturer of GPS modulesql += "INSERT INTO %s VALUES ('HFFTYFRTYPE', 'FLORIANMEISSNER,HCM');\n" % (headerTable)                     # Logger typesql += "INSERT INTO %s VALUES ('HFRFWFIRMWAREVERSION', '%s');\n"         % (headerTable, self.VERSION)       # Firmware versionsql += "INSERT INTO %s VALUES ('HFRHWHARDWAREVERSION',

结论

  1. 检查 SQL 语句是否成功执行:确保查询是正确的,并且确实返回了结果。
  2. 使用正确的游标类型:如果需要字典格式的结果,请使用 DictCursor
  3. 确保连接和游标有效:确保连接未中断,游标没有被关闭。
  4. 避免多次调用 fetchall():确保只调用一次 fetchall(),并将结果保存以便后续使用。

通过这些步骤,我们可以排查 pymysqlcur.fetchall() 返回 None 的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558487.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块

目录 一、GhostNetV2核心代码 二、修改common.py 三、修改yolo.py 三、建立yaml文件 四、训练 一、GhostNetV2核心代码 在models文件夹下新建modules文件夹,在modules文件夹下新建一个py文件。这里为GhostV2.py。复制以下代码到文件里面。 # TODO: ghostnetv…

好用的免费录屏软件推荐,让软件操作教程制作不再困难

录屏软件就像是我们做教程或者玩游戏时的“小助手”,它能帮我们把屏幕上的东西都记录下来,让视频看起来更高大上。今天我就给你推荐三款免费的好货,用它们做教程,保证让你轻松又开心。 1. 福昕录屏大师 虫洞 https://www.foxits…

【读书笔记·VLSI电路设计方法解密】问题4:今天的设计环境中使用的主要工艺技术是什么

主流的工艺技术是互补金属氧化物半导体(CMOS)技术。其他技术还包括双极性、双极CMOS(biCMOS)、绝缘体上硅(SOI)和砷化镓(GaAs)。 在CMOS技术中,"互补对称"指的…

SD入门教程一:Stable Diffusion 基础(技术篇)

前言 在开篇的时候就大致讲了SD和VAE,那么今天我们具象化地再来讲讲Stable Diffusion(稳定扩散)。 严格说来它是一个由几个组件(模型)构成的系统,而非单独的一个模型。我以最常见的文生图为例,…

大型保险公司进行营销活动时,如何与外部客户实现文件安全外发?

大型保险公司为了吸引新客户、维护老客户、提升品牌形象以及推广特定的保险产品,会定期向外部客户或潜在客户发送营销文件。在客户签单后,保险公司会将客户相关的签单个人文件发送给客户。因此,大型保险公司内部存在较为频繁且重要的文件安全…

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行: 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具: yum install bind bind-utils -y配置 BIND 编辑主配置文件: 使用文本编辑器打开 BIND 的主配…

电商价格监测的创新之路

在当今数字化高速发展的时代,电商如汹涌的浪潮席卷了商业的每一个角落。品牌们在这片广阔的电商海洋中奋力前行,而价格监测则成为了他们手中至关重要的罗盘。 力维网络以其专业的价格监测服务,为品牌在电商之海的航行点亮了一盏明灯。然而&a…

多节点网络流量监控与网络性能优化的利器——轻松实现高效管理

目录 为什么网络性能监控如此重要? 多节点网络流量监控如何优化网络性能? 实例:AnaTraf如何帮助企业解决网络故障 了解更多 随着企业网络规模的不断扩大,维护网络性能的复杂性日益增加。如何实时监控网络流量、快速排查网络故…

网安加·百家讲坛 | 潘继平:AI赋能DevOps平台:全面提升代码安全性

作者简介:潘继平,中国软协项目管理专委会专家,深圳市软件行业协会特聘专家。华为土耳其研究所外聘高级项目顾问,负责华为云应用生态圈产品线研发管理。曾为华为全球技术服务中心、华为制造IT以及华为流程IT解决方案提供等多个部门…

(二)、CT系统硬件构成

简单来说分为以下几个步骤来描述整个CT系统的运行流程: X射线管和探测器环绕被测物体,准直器进行高度准直X射线。X射线穿过被测物料时发生衰减,其中有两个探测器,一个是参考探测器记录和测量来自X射线管的辐射强度,另…

【C语言从不挂科到高绩点】28-数组综合运用

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程!! 数组是我们在C语言学习过程中比较重要的一个知识点,也是在今后的学习与开发过程中经常会用到的技能,…

明达IO:赋能工业机器人新未来

摘要: 明达技术以其卓越的分布式IO(MR30)与一体式IO(MR20)产品,为工业机器人行业提供了完美的信号交互解决方案。在集群式机器人应用场景中,MR30分布式IO以其稳定性能和自由热插拔功能&#xf…

“跨时空拥抱”风靡TikTok,这款AI视频工具借势变现20万美金,你也来看看吧!

用AI生成跨时空拥抱最近悄悄在海外翻红,还带火了一款AI视频产品。 8月28日,TikTok博主“iammskira”发布了一条配文为“用AI实现了拥抱我的妈妈,因为她已经不在人世了”的短视频教程,在TikTok上走红。 视频中,AI不仅…

Java毕业设计:Java社区物品置换网站系统毕业设计源代码作品和开题报告

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

xss-labs靶场第五关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.…

如何下载和安装CLion,图文详解

一、下载 登录JetBrains官网,下载最新版本的Clion,Clion目前没有社区版,都是专业版。 二、安装 1、启动Clion安装程序,下一步。 2、修改安装目录,下一步。 3、创建桌面快捷方式,更新PATH变量&#xff0…

【汇编语言】寄存器(CPU工作原理)(六)—— 修改CS,IP的指令以及代码段

文章目录 前言1. 修改CS、IP的指令2. 问题分析:CPU运行的流程3. 代码段小结结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计…

Excel中多条件筛选问题解决方法

例题解析: 有雇员信息表如下所示&#xff1a; 查询出 Gender 为 Female&#xff0c;且 1970 年以前出生的员工&#xff1a; spl("E(?1).select(Gender""Female"" && Birthday<""1970-01-01"")",A1:O32)SPL桌面…

SpringBoot框架在服装制造业的应用案例

2 关键技术简介 2.1 JAVA技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0…

手写mybatis之数据源的解析、创建和使用

前言 在上一章节我们解析 XML 中的 SQL 配置信息&#xff0c;并在代理对象调用 DefaultSqlSession 中进行获取和打印操作&#xff0c;从整个框架结构来看我们解决了对象的代理、Mapper的映射、SQL的初步解析&#xff0c;那么接下来就应该是连库和执行SQL语句并返回结果了。 那么…