Я действительно не знаю, как правильно задать свой вопрос. Я хочу иметь возможность выполнять поиск в базе данных sqlite3 с критериями, определяемыми кортежем. Первый раздел - это то, как я бы делал это обычно, и оператор печати работает так, как ожидалось:
import sqlite3 as sql
conn = sql.connect("Table.db")
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS db_table([name] text, [surname] text, [city] text, [state] text)""")
conn.commit()
cur.execute("""INSERT INTO db_table VALUES ("John", "Smith", "New York", "NY")""")
cur.execute("""INSERT INTO db_table VALUES ("Jacob", "Smith", "Chicago", "IL")""")
cur.execute("""INSERT INTO db_table VALUES ("Fred", "Smith", "Buffalo", "NY")""")
cur.execute("""INSERT INTO db_table VALUES ("Greg", "Allen", "Albany", "NY")""")
conn.commit()
search_name_1 = "John"
search_surname_1 = "Smith"
search_city_1 = "New York"
search_state_1 = "NY"
search_1 = (search_name_1, search_surname_1, search_city_1, search_state_1)
cur.execute("""SELECT * FROM db_table WHERE (name, surname, city, state)=(?,?,?,?)""", search_1)
results_1 = cur.fetchall()
print(results_1)
Если бы критерии поиска изменились (скажем, с записью tkinter), мог бы я по-прежнему искать, используя только некоторые индексов кортежа? Вот так:
import sqlite3 as sql
conn = sql.connect("Table.db")
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS db_table([name] text, [surname] text, [city] text, [state] text)""")
conn.commit()
cur.execute("""INSERT INTO db_table VALUES ("John", "Smith", "New York", "NY")""")
cur.execute("""INSERT INTO db_table VALUES ("Jacob", "Smith", "Chicago", "IL")""")
cur.execute("""INSERT INTO db_table VALUES ("Fred", "Smith", "Buffalo", "NY")""")
cur.execute("""INSERT INTO db_table VALUES ("Greg", "Allen", "Albany", "NY")""")
conn.commit()
search_name_2 = "*"
search_surname_2 = "Smith"
search_city_2 = "*"
search_state_2 = "NY"
search_2 = (search_name_2, search_surname_2, search_city_2, search_state_2)
cur.execute("""SELECT * FROM db_table WHERE (name, surname, city, state)=(?,?,?,?)""", search_2)
results_2 = cur.fetchall()
print(results_2)
В этом случае я хотел бы, чтобы печатали и Джон Смит, и Фред Смит, потому что они оба Смит и живут в Нью-Йорке.
Другой пример: если бы я введите search_city только как «Нью-Йорк», я бы ожидал, что Джон, Фред и Грег, потому что они живут в Нью-Йорке.