我遇到错误“没有数据 - 获取,选择或处理零行”的问题。
由于下面的答案描述了问题以及可能的解决方案,因此我将此问题缩短了。
追溯是:
cursor.execute("select function_1() from dual")
/django/lib/python2.6/django/db/backends/util.py in execute
15. return self.cursor.execute(sql, params)
/django/lib/python2.6/django/db/backends/mysql/base.py in execute
86. return self.cursor.execute(query, args)
usr/local/lib/python2.6/site-packages/MySQLdb/cursors.py in execute
176. if not self._defer_warnings: self._warning_check()
/usr/local/lib/python2.6/site-packages/MySQLdb/cursors.py in _warning_check
92. warn(w[-1], self.Warning, 3)
答案 0 :(得分:2)
我花了很长时间处理这个问题:"没有数据 - 零行被提取,选择或处理"。我意识到问题的一部分是不同版本的MySQL(或者Django和Python)会导致不同的行为。我不认为这是Python或Django特有的,但不知道。我不知道它是否与设置的某些变量有关,而不是不同版本中固有的变量。
两套版本是:
我的所作所为:
在Python中(通过Django):
cursor.execute("select function_1() from dual")
cursor.fetchall()
说明:
在VERSION SET1中
CASE 1a:Python调用function_1,其LAST查询返回NULL。我们得到了错误。
CASE 1b:Python调用function_1,它调用function2。没有mysql游标。如果function2的LAST查询返回null:仍然正确评估Function2并将正确的值返回给function1。
CASE 1c:Python调用function_1,它打开一个调用function2的游标(在游标循环内或游标中选择自身)。如果function2的LAST查询返回null:这很糟糕。光标立即关闭,function_1继续,就像光标已被评估一样。没有警告。
VERSION SET1的结论:
在VERSION SET2中
CASE 2a:Python调用function_1,其中ANY查询返回NULL。我们得到了错误。
CASE 2b:Python调用function_1,它调用function2。没有mysql游标。如果function2s有任何返回null的查询:我们得到错误。
CASE 2c:Python调用function_1,它打开一个调用function2的游标(在游标循环内或 在光标中选择自己)。如果function2有任何返回null的查询:我们得到错误。
总结版本SET2
总之,它可以同时使用: