Как правильно сделать insert?
Всем привет! Использую python+firebird. Хочу создать новую запись в таблице
В таблице есть тригер на генерацию ID и даты:
AS
BEGIN
if(new.id is null) then new.id=gen_id(d_gen_commands,1);
new.datetime="now";
post_event "d_new_command";
END
cur.execute(f"insert into d_commands values {(num, date_and_time, 1, 'open_door,0', -1062731554)}")
Мой код выше полностью работает, но мне надо не 5 значений вписывать, а только 3 из них.
И вот моё решение:
cur.execute(f"insert into d_commands (executor, text, phis_addr) values ({int(1)}, {str(action)}, {int(-1062731554)})")
да, может с int и str не красиво выглядит, но я уже отчаялся что "мало-ли"... Всё что нашел - перепробовал, поэтому я тут :) Выдаёт следующую ошибку:
('Error while preparing SQL statement:\n- SQLCODE: -206\n- Dynamic SQL Error\n- SQL error code = -206\n- Column unknown\n- OPEN_DOOR\n- At line 1, column 63', -206, 335544569)
Подскажите пожалуйста как решить эту проблему. Спасибо!
Ответы (1 шт):
Автор решения: Alpensin
→ Ссылка
Вы некорректно вставляете данные. Через f-строки. А надо через отдельный аргумент. Возможно проблема в том, что в команде open_door,0 есть запятая. Ну или как минимум надо обернуть все str в кавычки.
А данные надо вставлять так:
cur.execute("insert into d_commands (executor, text, phis_addr) values (?,?,?)", (1, action, -1062731554))