我需要一次处理一行mysql数据,并且我已选择所有行将它们放入元组中,但我得到上面的错误。
这是什么意思,我该怎么做呢?
答案 0 :(得分:11)
您可能会调用一些应该更新数据库的函数,但该函数不会返回任何数据(如cursor.execute()
)。和代码:
data = cursor.execute()
使data
成为None
对象(NoneType
)。但是如果没有代码,很难指出错误的确切原因。
答案 1 :(得分:6)
这意味着您尝试迭代的对象实际上是None;也许查询没有产生结果?
你能发一个代码样本吗?
答案 2 :(得分:5)
用于选择所有行的函数返回None。这“可能”(因为你没有提供代码,我只是假设)意味着SQL查询没有返回任何值。
答案 3 :(得分:3)
调用cursor.execute()后尝试使用cursor.rowcount变量。 (此代码无效,因为我不知道您使用的是哪个模块。)
db = mysqlmodule.connect("a connection string")
curs = dbo.cursor()
curs.execute("select top 10 * from tablename where fieldA > 100")
for i in range(curs.rowcount):
row = curs.fetchone()
print row
或者,您可以这样做(如果您知道您希望返回结果):
db = mysqlmodule.connect("a connection string")
curs = dbo.cursor()
curs.execute("select top 10 * from tablename where fieldA > 100")
results = curs.fetchall()
if results:
for r in results:
print r
答案 4 :(得分:2)
此错误表示您尝试遍历None对象。这就像尝试在C / C ++中循环Null数组一样。正如Abgan,orsogufo,Dan提到的,这可能是因为查询没有返回任何内容。我建议你查看你的查询/数据库连接。
重现此错误的简单代码片段是:
x =无
对于x中的每个i: #做一点事 通
答案 5 :(得分:0)
当我尝试让'usrsor.fetchone'执行两次时,可能会发生这种情况。像这样:
import sqlite3
db_filename = 'test.db'
with sqlite3.connect(db_filename) as conn:
cursor = conn.cursor()
cursor.execute("""
insert into test_table (id, username, password)
values ('user_id', 'myname', 'passwd')
""")
cursor.execute("""
select username, password from test_table where id = 'user_id'
""")
if cursor.fetchone() is not None:
username, password = cursor.fetchone()
print username, password
我不太了解原因。但是我用try修改了它,除了像这样:
import sqlite3
db_filename = 'test.db'
with sqlite3.connect(db_filename) as conn:
cursor = conn.cursor()
cursor.execute("""
insert into test_table (id, username, password)
values ('user_id', 'myname', 'passwd')
""")
cursor.execute("""
select username, password from test_table where id = 'user_id'
""")
try:
username, password = cursor.fetchone()
print username, password
except:
pass
我猜cursor.fetchone()不能执行两次,因为第一次执行时光标将为None。
答案 6 :(得分:0)
我知道这是一个古老的问题,但我想我又增加了一个可能性。我在调用存储过程时遇到此错误,并在存储过程的顶部添加SET NOCOUNT ON解决了它。问题是早期选择不是程序的最终选择使得它看起来像你有空行集。
答案 7 :(得分:0)
尝试将查询结果附加到列表中,然后您可以访问它。像这样:
try:
cursor = con.cursor()
getDataQuery = 'SELECT * FROM everything'
cursor.execute(getDataQuery)
result = cursor.fetchall()
except Exception as e:
print "There was an error while getting the values: %s" % e
raise
resultList = []
for r in result:
resultList.append(r)
现在你有一个可迭代的列表。