[英]Python sqlite3 select where not row equals each element of list
我在python中有一個列表:
usernames = ["username 1", "Username 2", ... "Username 3"]
我必須執行sql查詢,以從表中選擇所有行,其中用戶名不等於列表中的任何元素。
results = cursor.execute("SELECT * FROM table WHERE NOT username = ?", usernames)
我該如何實現?
您可以使用NOT IN
條件。 不幸的是,不能用值列表替換占位符,因此,必須為usernames
列表中的每個元素創建一個占位符:
In [24]: c.execute('SELECT * FROM test').fetchall()
Out[24]: [('name1',), ('name2',), ('name3',)]
In [25]: usernames = ['name2', 'name4', 'name5']
In [26]: sql = 'SELECT * FROM test WHERE name NOT IN ({})'.format(','.join('?' * len(usernames)))
In [27]: c.execute(sql, usernames).fetchall()
Out[27]: [('name1',), ('name3',)]
In [28]: usernames += ['name1']
In [29]: sql = 'SELECT * FROM test WHERE name NOT IN ({})'.format(','.join('?' * len(usernames)))
In [30]: c.execute(sql, usernames).fetchall()
Out[30]: [('name3',)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.