У меня есть база данных SQLite3 с 1 таблицей и множеством столбцов. Столбцы представляют собой смесь REAL, INTEGERS и TEXT. Некоторые из текстовых записей содержат datetime.
Я хотел бы вставить строки в таблицу без добавления дубликатов. В таблице больше столбцов, чем я вставляю данные. Чтобы сделать это, я хотел бы сначала запросить таблицу для любых строк, которые содержат все данные, которые я хотел бы вставить. Если таблица не содержит строки с соответствующим набором параметров, вставьте строку.
Если таблица имеет 2 строки в настоящее время и выглядит следующим образом:
a, b, c, d
2019-09-20 00:00:00, 1.1, 'DOG', nan
2019-10-20 10:00:00, 2.2, 'CAT', -2000
Вставка строкипрост:
insert_vals = [datetime.datetime(2019, 9, 27, 0, 0), 123.4, 'DOG']
column_names = ['a', 'b', 'c']
strDBInsert = "INSERT INTO table_name ({}) VALUES ({})".format(column_names, strQuestions)
conn = sqlite3.connect('db_name.db')
c= conn.cursor()
c.execute(strDBquery, insert_vals)
conn.commit()
Однако возможно ли выполнить запрос к базе данных аналогичным образом, как показано ниже?
strDBquery = "SELECT * FROM table_name WHERE {} LIKE {}".format(column_names, insert_vals)
c.execute(strDBquery, insert_vals)
queryData = c.fetchall()
Я получаю ошибку
sqlite3.OperationalError: near ",": syntax error
Я ожидаю вывод:
print(queryData)
Output: [datetime.datetime(2019, 9, 27, 0, 0), 123.4, 'DOG', nan]
Другой вариант, который мне понадобится:
c.execute("SELECT * FROM table_name WHERE a == datetime.datetime(2019, 9, 27, 0, 0), AND b == 123.4 AND c == DOG")
Для большего контекста я использую python с пандами для чтенияв CSV с биржевых транзакций, и я хочу обновить базу данных с новыми транзакциями. Затем я хочу добавить другую информацию в эту таблицу транзакций и использовать другую таблицу в базе данных для хранения информации о портфеле. Может быть, есть гораздо более простой способ сделать большинство из них без запроса, а затем вставить опцию.
Некоторые другие похожие вопросы:
SQLite3 запрашивает базу данных с помощью «?»заполнители
SQLite3 LIKE-запрос с кодировкой UTF-8