python mysql获取行数据类型_Python/MySQL:没有获取、选择或处理的数据零行

我花了很长时间来处理这个问题:“没有数据-零行获取、选择或处理”。我意识到问题的一部分是不同版本的MySQL(或者可能是Django和Python)会导致不同的行为。我不认为这是Python或Django特有的,但不知道。我不知道它是否与设置的变量有关,而不是不同版本中固有的一些东西。在

这两套版本是:set1:(MySQL:5.5.19),(Python:2.7.1),(Django:1.3.0)

set2:(MySQL:5.0.05),(Python:2.6.8),(Django:1.2.4)

我的工作:

在Python中(通过Django):cursor.execute("select function_1() from dual")

cursor.fetchall()

定义:伪查询是指数据库中保证返回行的任何查询,但在代码逻辑中没有任何用途。在

continue-handler_1329是:为1329声明continue处理程序begin-end

在版本集1中

案例1a:Python调用函数_1,该函数的最后一个查询返回NULL。我们得到了错误。在通过在结尾包含伪查询(或确保最后一个查询不返回null)来修复此问题。在

包含continue_handler_1329没有任何效果,假设函数_1没有游标。见下文。在

案例1b:Python调用函数_1,后者调用function2。没有mysql游标。如果function2的最后一个查询返回null:function2仍然正确求值,并向function1返回正确的值。在无需修复。在

包含continue_handler_(在任何一个函数中)都没有效果(它仍然有效)。在

案例1c:Python调用函数_1,它打开一个调用function2的游标(在游标循环内或在游标选择本身中)。如果function2的最后一个查询返回null:这是错误的。光标立即关闭,函数_1继续,就好像光标已被计算一样。没有警告。在通过在函数2的末尾包含伪查询(或确保其最后一个查询不返回null)修复了此问题

在函数2中包含continue_handler_1329没有效果。在

将continue_handler_1329包含在函数_1中会导致无限循环。当游标用完行时,它不会在自己的处理程序中结束,而是在新的处理程序中结束,而不是设置Done=True。在

关于版本1的总结:将最后一个伪查询添加到从Python调用的函数以及可能从游标调用的任何函数。或者确保这些函数的最后一个查询永远不会返回null。continue_handler_1329不能解决此问题,并且会导致带有游标的函数出现问题(除非continue_handler_1329在它自己的作用域内)。在

在版本集2中

案例2a:Python调用函数_1,其中任何查询都返回NULL。我们得到了错误。在没有虚拟查询可以修复此问题。在

通过包含continue_handler_1329修复,假设函数_1没有任何游标(见下文)。或者确保没有查询返回null。在

案例2b:Python调用函数_1,后者调用函数2。没有mysql游标。如果function2s有任何返回null的查询:我们得到错误。在虚拟查询无法修复此问题。在

通过在函数2中包含continue_handler_1329(或确保没有查询返回null)修复了此问题。在

在function1中包含continue_handler_1329没有效果,除非它有一个游标(见下文)

案例2c:Python调用函数_1,该函数打开一个调用函数2的游标(在游标循环内或

在光标中选择自身)。如果function2有任何返回null的查询:我们得到错误。在没有虚拟查询可以修复此问题。在

通过在函数2中包含continue_handler_1329(或确保没有查询返回null)修复了此问题。在

将continue_handler_1329包含在函数_1中会导致infinite循环。当游标用完行时,它不会在自己的处理程序中结束,而是在新的处理程序中结束,而不是设置Done=True。在

第2版总结将continue_handler_添加到任何可能具有返回null的查询的函数中,带有游标的函数除外。这些不应包含任何返回null的查询,声明的游标本身除外。但是,带有游标的函数可能包含一个单独的begin-end作用域和一个返回null的查询和continue处理程序_1329。在

总之,它在以下两个方面都能发挥作用:将continue_handler_添加到可能包含返回null的查询的所有函数中,并将最后一个伪查询添加到从Python调用的函数以及可以从游标调用的任何函数。带有游标的函数不能包含continue_handler_1329,也不能包含返回null的查询,除非它们位于单独的begin-end作用域中。(游标查询本身可能返回null,这将由游标的continue处理程序处理)。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值