Как правильно сделать 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))
→ Ссылка