Попытка вставить переменную в базу данных продолжает получать ошибки - PullRequest
0 голосов
/ 21 мая 2019

Попытка вставить каждый второй элемент списка в базу данных при нажатии кнопки, но продолжает выдавать ошибки

testing=connect(database='test.db')
    test_db=testing.cursor()
    test_db.execute('DELETE FROM test_table;')
    for zz in range(0, len(list), 2):
        print(titles[zz])
        query='INSERT INTO test_table (test_name) VALUES('+list[zz]+')'
        query2='INSERT INTO test_table (test_date) VALUES('+list2[zz]+')'
        test_db.execute(query)
        test_db.execute(query2)

Это ошибка, которую я получаю

Exception in Tkinter callback
Traceback (most recent call last):

sqlite3.OperationalError: unrecognized token: "3D"

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Сначала вы напрямую записываете значения параметров в строку запроса, что считается плохой практикой. Правильный способ здесь будет использовать параметризованный запрос. Затем, когда вы используете 2 оператора вставки, вы собираетесь разделить каждый фильм на 2 строки базы данных, без возможности связать название и дату, что странно. Наконец, и что является причиной ошибки, строки SQL должны быть заключены в одинарные кавычки, чего вы не смогли сделать.

Итак, прямое исправление ошибки:

    query="INSERT INTO test_table (test_name) VALUES('"+titles[zz]+"')"
    query2="INSERT INTO test_table (test_date) VALUES('"+dates[zz]+"')"

Но ИМХО, что вы должны сделать, с помощью простого параметризованного запроса:

    query='INSERT INTO test_table (test_name, test_date) VALUES(?,?)'
    test_db.execute(query, (titles[zz], dates[zz]))

или даже лучше, подготовив запрос только один раз для всех вставок:

test_db.execute('DELETE FROM test_table;')
query='INSERT INTO test_table (test_name, test_date) VALUES(?,?)'
test_db.execute-many(query, [(titles[zz], dates[zz])
                                      for zz in range(0, len(titles), 2)]
0 голосов
/ 21 мая 2019

Не уверен, какую версию Python вы используете, но я думаю, что это должно работать как для 2 & 3;

testing=connect(database='test.db')
    test_db=connection.cursor()
    test_db.execute('DELETE FROM test_table;')
    for zz in range(0, len(titles), 2):
        query='INSERT INTO `test_table`(`test_name`, `test_date`) VALUES ({},{})'.format(titles[zz],dates[zz])
        test_db.execute(query)

Отсутствует немного контекста, например, структура вашей таблицы, поэтому я не уверен, что она будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...