簡體   English   中英

檢查表X的Z列中的值Y

[英]check if value Y in column Z in table X

我想編寫一個函數來檢查表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”。 有人可以幫助我修復代碼嗎?

我添加了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

要檢查某行的某列中是否有值,您的檢查應類似於:

if value in row[col]:

同樣,您執行一個result = cursor.fetchall() ,它返回結果行的迭代器。 我相信您應該循環檢查。

我寧願使用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模塊用正確的占位符標記替換。

邊注

如上例所示:

if condition:
    return True
else:
    return False

可以替換為:

return condition

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM