检查表X中列Z中的值Y.

时间:2014-03-05 06:21:01

标签: python sqlite python-2.7

我想编写一个函数来检查表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')

它打印“false”和“false”,但它应该打印“true”和“false”。任何人都可以帮我修改我的代码吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要检查某行是否在某个列中有值,您的检查应该是:

if value in row[col]:

此外,您执行result = cursor.fetchall(),它返回结果行的迭代器。我相信你应该循环检查。

答案 2 :(得分: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

?应根据您正在使用的DB-API模块替换为正确的占位符标记。

SIDE NOTE

如上例所示:

if condition:
    return True
else:
    return False

可以替换为:

return condition