2014-03-05 81 views
0

我想編寫一個函數來檢查表X在列Z中是否有一個Y值爲Y的行。如果滿足此條件,則返回True,否則返回False。檢查表X中列Z的值Y

我寫了以下功能:

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') 

它打印「假」和「假」,但它應打印「真「和」假「。任何人都可以幫助我解決我的代碼?

回答

1

我增加了print result和它表明結果是充分的:

if condition: 
    return True 
else: 
    return False 

可以替換元組。所以我相應地更新了你的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 
+0

非常感謝 – neymar

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 

?應該以正確的佔位符標記根據你使用DB-API模塊進行更換。

邊注

如在上面的例子中示出:

return condition 
相關問題