2009-02-09 13 views

ответ

10
  1. Предоставьте некоторый код.
  2. Возможно, вы вызываете функцию, которая должна обновлять базу данных, но функция не возвращает никаких данных (например, cursor.execute()). И код:

    данных = cursor.execute()

    Делает data в None объект (из NoneType). Но без кода трудно указать на точную причину вашей ошибки.

6

Это означает, что объект, который вы пытаетесь выполнить итерацию, фактически отсутствует; возможно, запрос не дал никаких результатов?
Не могли бы вы разместить образец кода?

5

Функция, которую вы использовали для выбора всех возвращенных строк None. Это «возможно» (потому что вы не предоставили код, я только предполагаю) означает, что SQL-запрос не возвращал никаких значений.

2

Попробуйте использовать переменную cursor.rowcount после вызова cursor.execute(). (этот код не будет работать, потому что я не знаю, какой модуль вы используете).

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 
2

Эта ошибка означает, что вы пытаетесь петлю над None объекта. Это похоже на попытку петли над массивом Null в C/C++. Как сказал Абган, orsogufo, Дан, вероятно, потому, что запрос ничего не возвращал. Я предлагаю вам проверить ваше соединение query/databse.

Простой фрагмент кода для воспроизведения этой ошибки:

х = None

для каждого я х: # сделать что-то проход

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 

Не знаю много причин. Но я изменил его попробовать, и за исключением, как это:

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, если выполнить ее первый раз.

0

Я знаю, что это старый вопрос, но я думал, что добавлю еще одну возможность. Я получал эту ошибку при вызове хранимой процедуры и добавлял SET NOCOUNT ON в верхней части хранимой процедуры. Проблема в том, что ранее выбираемые, которые не являются окончательным выбором для процедуры, выглядят так, будто у вас есть пустые наборы строк.

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) 

Теперь у вас есть список, который является итерируемым.

Смежные вопросы