(SELECT * FROM таблица) с различными результатами для fetchone () и итерации - PullRequest
0 голосов
/ 26 марта 2019

Я в цикле, пытаюсь проверить, есть ли конкретная запись в таблице - если это не так, я вставлю ее, если это так, я обновлю ее. Я пытался fetchone() после c.execute(SELECT * ), и он всегда возвращает None, но если я пытаюсь выполнить итерацию с for result in c.execute(SELECT * ), я получаю ожидаемые результаты.

Этот итератор работает, либо давая мне запись, которую я ожидаю найти, и которая, как я знаю, есть, либо пропускаю полностью для id_str Я знаю, что ее нет (нет смысла использовать это в коде, так как запись уникален, поэтому цикл запускается один раз или никогда, но я запустил его для тестирования):

for result in db_api.cursor().execute("SELECT * FROM fav_history WHERE tweet_id_str=?", (id_str,)):
#do stuff

Но с этим

db_api.cursor().execute("SELECT * FROM fav_history WHERE tweet_id_str=?", (id_str,))
result = db_api.cursor().fetchone()
if result is None:
#insert
else:
#update

result всегда None, даже для id_str Я знаю, что в таблице.

Что мне не хватает? Как я могу сделать эту проверку правильным и эффективным способом?

1 Ответ

1 голос
/ 26 марта 2019

Проблема во втором случае заключается в том, что вы генерируете новый курсор, когда вы фактически обращаетесь к набору результатов.Вместо этого определите переменную для курсора, а затем повторно используйте это:

cursor = db_api.cursor()
cursor.execute("SELECT * FROM fav_history WHERE tweet_id_str=?", (id_str,))
result = cursor.fetchone()
if result is None:
    # insert
else:
    # update
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...