Попытка проверить, если значение уже в БД MySQL - PullRequest
2 голосов
/ 04 октября 2011

Я пишу скрипт, который будет запускаться каждые 20 минут и который ищет файлы для загрузки, но я хочу проверить, загрузил ли я уже этот файл: Сначала мой код выполняет эту команду:

cursor.execute("SELECT `file_id` FROM `reports`")
file_ids = list(cursor.fetchall())

file_idsэто более длинная версия этого:

[('735724',), ('734791',), ('735934',), ('735486',)]

Я написал эту функцию, чтобы проверить, скачал ли я уже файл:

def new_file(file):
    file = "('%s',)" % (file)
    if (file in file_ids):
        print "true"
    else:
        print "false"   

Когда я пытаюсь проверить функцию:

file = "735724"
new_file(file)

Он последовательно печатает false.

Что я делаю не так?

Я знаю, что могу выполнить инструкцию MySQL для каждого fileid, чтобы проверить, есть ли у меня файл ужено так как есть тысячи файлов для проверки, я предположил, что это будет быстрее.Если я ошибаюсь, поправьте меня.

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Результаты из базы данных - это не строка, это список кортежей. Что вы, вероятно, хотите сделать, это создать список только с идентификаторами, а затем проверить, есть ли это числовое значение в списке. Например:

file_ids = [row[0] for row in cursor.fetchall()]
is_in_list = test_id in file_ids
if is_in_list:
    print "true"
0 голосов
/ 04 октября 2011

вам не нужно конвертировать все в строку.попробуй:

def new_file(file):
  return (file, ) not in file_ids
...