上面这段代码的逻辑是从source.xlsx文件中读取某一列,然后根据该列的每一行字符串从mysql数据中找出该字符串及其对应的值,对于绝大部分source.xlsx列中的字符串,在mysql数据表中都仅有一条记录与之对应,也就是说大多数情况下cursor.execute(aos_query, (name.strip(),))内只有一行记录,但当mysql中遇到执行cursor.execute(aos_query, (name.strip(),))出现多于一行记录时,程序就会出错:
请问这是什么原因。
for i, name in enumerate(names):
cursor.execute(aos_query, (name.strip(),)) // 假如这里读到多行数据,结果集缓存在某个地方
// 下面从游标中读取数据,相当于执行了fetchone,如果有多条数据,那游标对应位置之后还有数据
for w, s in cursor: // 可以改为**for w, s in cursor.fetchall()**返回所有数据
acc_or_syn[i] = w
// 游标对应位置还有数据,这里又进行查询会导致上次查询的数据丢失,所以给你抛异常
cursor.execute(acc_query, (s,))
acc_tuple = cursor.fetchone()
acc_family[i], acc_genus[i], acc_names[i], acc_fnames[i] = acc_tuple
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。