检查表X中列Z是否存在值Y

0 投票
3 回答
1892 浏览
提问于 2025-04-17 20:54

我想写一个函数来检查表格X的Z列中是否有一行的值是Y。如果这个条件满足,就返回真(True),否则返回假(False)。

我写了下面这个函数:

def valueInDatabase(cursor,value,table, col):
    check = cursor.execute("""SELECT %s from %s"""%(col,table))
    result = cursor.fetchall()
    if value in result:
        return True
    else:
        return False

然后我用下面的代码来测试我的函数:

conn = sqlite.connect(":memory:")
cursor = conn.cursor()
cursor.execute("CREATE TABLE problem1 (x int unique)""")
cursor.executemany("INSERT INTO problem1(x) VALUES (?)",[(1,),(2,),(3,),(4,)])
print valueInDatabase(cursor,5,'problem1','x')
print valueInDatabase(cursor,2,'problem1','x')

结果它打印了“假”和“假”,但我希望它能打印“真”和“假”。有没有人能帮我修复我的代码?

3 个回答

0

要检查某一行的特定列是否有值,你可以这样做:

if value in row[col]:

另外,你还需要用 result = cursor.fetchall() 这个命令,它会返回一系列结果的行。我觉得你应该在一个循环里进行检查。

0

我更喜欢使用SQL的功能,而不是从表中获取所有记录。

def valueInDatabase(cursor,value,table, col):
    check = cursor.execute(
        "SELECT COUNT(*) from {} WHERE {} = ?".format(col, table), 
        [value])
    row = cursor.fetchone()
    return row[0] > 0

? 应该根据你使用的数据库API模块替换成正确的占位符。

附注

在上面的例子中:

if condition:
    return True
else:
    return False

可以替换为:

return condition
1

我加了一个 print result,结果显示里面全是元组。所以我相应地更新了你的 if 语句。

def valueInDatabase(cursor,value,table, col):
    check = cursor.execute("""SELECT %s from %s"""%(col,table))
    result = cursor.fetchall()
    print result           # returns [(1,), (2,), (3,), (4,)]
    # So we should check for the tuple, value, like this:
    if (value,) in result:
        return True
    else:
        return False

撰写回答