Форум сайта python.su
Всех приветствую! Возникла такая проблема. Есть база, в которой точно есть имена name1, name2 и name3, необходимо отфильтровать базу, чтобы достать все значения кроме этих.
Итак, что я пишу:
with sqlite3.connect(data.sqlite') as conn: cursor = conn.cursor() t = ('name1', 'name2', 'name3') cursor.execute(''' SELECT Names FROM NamesTable WHERE Names NOT IN ? ''', t) # (t,) или (t) тоже не помогает cursor.fetchall()
SELECT Names FROM NamesTable WHERE Names NOT IN ('name1', 'name2', 'name3')
Отредактировано Gosha777 (Янв. 1, 2018 19:04:07)
Офлайн
t = ('name1', 'name2', 'name3') cursor.execute(''' SELECT Names FROM NamesTable WHERE Names != ? AND Names != ? AND Names != ?''', t) #или так sql = "SELECT Names FROM NamesTable WHERE Names NOT IN " + "('name1','name2,'name3')" cursor.execute(sql)
Отредактировано vic57 (Янв. 1, 2018 23:20:25)
Офлайн
>>> import sqlite3 >>> >>> con = sqlite3.connect(':memory:') >>> cur = con.cursor() >>> cur.execute('create table NamesTable (Names text, Numbers integer)') <sqlite3.Cursor object at 0x7f2a2f812650> >>> cur.execute('insert into NamesTable values ("name0", 0)') <sqlite3.Cursor object at 0x7f2a2f812650> >>> cur.execute('insert into NamesTable values ("name1", 1)') <sqlite3.Cursor object at 0x7f2a2f812650> >>> cur.execute('insert into NamesTable values ("name2", 2)') <sqlite3.Cursor object at 0x7f2a2f812650> >>> cur.execute('insert into NamesTable values ("name3", 3)') <sqlite3.Cursor object at 0x7f2a2f812650> >>> cur.execute('insert into NamesTable values ("name4", 4)') <sqlite3.Cursor object at 0x7f2a2f812650> >>> >>> t = ('name1', 'name2', 'name3') >>> >>> cmd = """ ... SELECT Names ... FROM NamesTable ... WHERE Names NOT IN ({}) ... """.format(', '.join('?' * len(t))) >>> >>> print(cmd) SELECT Names FROM NamesTable WHERE Names NOT IN (?, ?, ?) >>> >>> list(cur.execute(cmd, t)) [('name0',), ('name4',)] >>>
Отредактировано py.user.next (Янв. 2, 2018 13:24:01)
Офлайн
Лучше делать как сказал py.user.next - это и универсально и безопасно
Офлайн