JJ39
Июнь 15, 2019 08:32:11
cursor.execute("INSERT INTO" +table_name+ "VALUES"+a)
Начал с этого, но получаю ошибку.
cursor.execute('INSERT INTO {}' + "VALUES {}".format(table_name, a))
Надеялся что заработает это, но так же ошибка.
rami
Июнь 15, 2019 09:59:58
У вас метод
.format(table_name, a) относится только к строке
“VALUES {}”, а
'INSERT INTO {}' оказывается как-то побоку.
Пробуйте так:
c.execute("INSERT INTO {} VALUES{}".format(table_name, a))
JOHN_16
Июнь 15, 2019 10:42:15
Вообще не так надо делать, надо не самому формировать строку запроса, а использовать подстановку значений через спец символ ? или подобный.
cursor.execute('INSERT INTO table_name VALUES (?,?,?)', (1,2,3))
Egorro13
Июнь 15, 2019 12:38:02
JJ39, для наглядности:
>>> table_name = ‘TableName’
>>> a = ‘values’
>>> “INSERT INTO” +table_name+ “VALUES”+a
'INSERT INTOTableNameVALUESvalues'
>>> ‘INSERT INTO {}’ + “VALUES {}”.format(table_name, a)
'INSERT INTO {}VALUES TableName'
rami, тоже вроде с тем же косяком:
>>> “INSERT INTO {} VALUES{}”.format(table_name, a)
'INSERT INTO TableName VALUESvalues'
rami
Июнь 15, 2019 13:52:01
Egorro13, a — должно быть списком или кортежем значений, а не строкой (если у строки число символов равно числу полей, то “порвёт” строку на символы, если не равно, будет ругаться).
JOHN_16 прав, нужно подставлять знаки ? в соответствии с числом полей таблицы, вставка напрямую небезопасна.
P.S. Я всегда вставляю данные с подстановкой, но в предыдущем ответе имел в виду как вставить данные в строку (а не в базу) с помощью .format()
Egorro13
Июнь 15, 2019 14:59:50
rami
Понял, я еще до SQL в Питоне не добирался - почему-то посчитал, что а - тоже в строчном формате
Rafik
Июнь 24, 2019 11:17:23
Вот это
JOHN_16
cursor.execute('INSERT INTO table_name VALUES (?,?,?)', (1,2,3))
Предлагаю переделать вот так
cursor.execute('INSERT INTO {} VALUES (?,?,?)'.format(table_name), (1,2,3))