检查表X中列Z是否存在值Y
我想写一个函数来检查表格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