Форум сайта python.su
cursor.execute("INSERT INTO" +table_name+ "VALUES"+a)
cursor.execute('INSERT INTO {}' + "VALUES {}".format(table_name, a))
Офлайн
У вас метод .format(table_name, a) относится только к строке “VALUES {}”, а 'INSERT INTO {}' оказывается как-то побоку.
Пробуйте так:
c.execute("INSERT INTO {} VALUES{}".format(table_name, a))
Офлайн
Вообще не так надо делать, надо не самому формировать строку запроса, а использовать подстановку значений через спец символ ? или подобный.
cursor.execute('INSERT INTO table_name VALUES (?,?,?)', (1,2,3))
Офлайн
JJ39, для наглядности:
>>> table_name = ‘TableName’rami, тоже вроде с тем же косяком:
>>> a = ‘values’
>>> “INSERT INTO” +table_name+ “VALUES”+a
'INSERT INTOTableNameVALUESvalues'
>>> ‘INSERT INTO {}’ + “VALUES {}”.format(table_name, a)
'INSERT INTO {}VALUES TableName'
>>> “INSERT INTO {} VALUES{}”.format(table_name, a)
'INSERT INTO TableName VALUESvalues'
Офлайн
Egorro13, a — должно быть списком или кортежем значений, а не строкой (если у строки число символов равно числу полей, то “порвёт” строку на символы, если не равно, будет ругаться).
JOHN_16 прав, нужно подставлять знаки ? в соответствии с числом полей таблицы, вставка напрямую небезопасна.
P.S. Я всегда вставляю данные с подстановкой, но в предыдущем ответе имел в виду как вставить данные в строку (а не в базу) с помощью .format()
Отредактировано rami (Июнь 15, 2019 13:58:43)
Офлайн
rami
Понял, я еще до SQL в Питоне не добирался - почему-то посчитал, что а - тоже в строчном формате
Офлайн
Вот это
JOHN_16Предлагаю переделать вот такcursor.execute('INSERT INTO table_name VALUES (?,?,?)', (1,2,3))
cursor.execute('INSERT INTO {} VALUES (?,?,?)'.format(table_name), (1,2,3))
Офлайн