尝试检查值是否已在MySQL数据库中

2 投票
2 回答
2590 浏览
提问于 2025-04-17 03:36

我正在写一个脚本,这个脚本每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。

我哪里做错了呢?

我知道我可以对每个fileid运行一个MySQL语句,来查看我是否已经有这个文件,但因为要检查的文件有成千上万,所以我以为这样做会更快。如果我错了,请随时纠正我。

2 个回答

0

你不需要把所有东西都转换成字符串。试试这个:

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

从数据库得到的结果不是一个字符串,而是一个元组的列表。你可能想要做的是先创建一个只包含ID的列表,然后检查那个数字值是否在这个列表里。比如:

file_ids = [row[0] for row in cursor.fetchall()]
is_in_list = test_id in file_ids
if is_in_list:
    print "true"

撰写回答