почему cursor.execute с pymysql всегда получает ошибку nonetype

Я пытался обновить записи с помощью cursor.execute в базе данных, но он всегда возвращает NoneType, а не итерируемую ошибку, поэтому я решил проверить что-то простое, например «выбрать curtime()», и он дает ту же ошибку.

cnx=pymysql.connect(user=user,password=pw,
                   host=127.0.0.1,port=3306,db=test,autocommit=True)
cursor=cnx.cursor()
cursor.execute('Select curtime()')

я получаю 'TypeError: объект 'NoneType' не является итерируемым'

Изменить: я понимаю, что вы имеете в виду, говоря о необходимости полной трассировки, я вернулся домой, и проблема исчезла.

File "/opt/anaconda3/lib/python3.4/site-packages/pymysql/cursors.py", line 51, in close
while self.nextset():

с этой ошибкой, которую я нашел из других статей, это потому, что моя более ранняя реальная строка оператора sql cursor.execute(longsqlstatement) очень длинная, и когда я пытаюсь закрыть соединение и курсор, это вызывает эту ошибку. и в моем тесте curtime(), поскольку мой предыдущий курсор не закончил выполнение, он также вызывает ошибку NoneType. Итак, мой вопрос: как я узнаю, что все инструкции sql успешно выполнены, и я могу закрыть соединение?


person desmond    schedule 19.08.2015    source источник
comment
Не из того кода, которого вы не знаете. Пожалуйста, покажите полную трассировку.   -  person Daniel Roseman    schedule 19.08.2015


Ответы (1)


Не удалось найти ответ, поэтому решил сломать длинную строку с несколькими инструкциями successitem=0 faileditem=0

cursor = cnx.cursor()
executeitems=statement.split(';')
for item in executeitems:
    item=item.strip()
    if item!='':
        try:
            cursor.execute(item)
            result=cursor.rowcount
            if result>-1:
                #print('Successful:',item)
                successitem=successitem+1
        except:
            faileditem=faileditem+1
            print('--FAIL TO UPDATE:', item)

cnx.commit()
print('successfully commited items:',successitem)
print('failed items:',faileditem)

cnx.close()
person desmond    schedule 20.08.2015