我想编写一个函数来检查表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”。任何人都可以帮我修改我的代码吗?
答案 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