Ну, я Я еще не так далеко, потому что первый INSERT уже терпит неудачу. Когда я запускаю этот код, COMMIT иногда создает 7, 5 или 3 одинаковых строки, что, очевидно, приводит к сбою ограничения UQ каждый раз, даже в пустой таблице. Отключение его и запуск SELECT после COMMIT отображают несколько строк только для одной операции. Как это возможно и что я могу сделать, чтобы взломать его?
Мой код на Python:
Код: Выделить всё
with Session(oracle_engine(), autoflush=False, autobegin=False) as session:
insert_sql = sqlalchemy.text("")
item = data.iloc[0] # pd.DataFrame
parameters = [sqlalchemy.bindparam(k, v) for k, v in item.to_dict().items()]
parameters += [sqlalchemy.sql.outparam("id_out", type_=sqlalchemy.INT)]
insert_sql = insert_sql.bindparams(*parameters)
session.begin()
result = connection.execute(statement=insert_sql)
id_out = result.out_parameters["id_out"]
session.commit()
Код: Выделить всё
INSERT INTO table_1
(
column_1,
column_2
)
VALUES
(
:column_1,
:column_2,
) RETURNING ID INTO :id_out;
Код: Выделить всё
CREATE TABLE table_1
(
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
column_1 VARCHAR2(38 CHAR) NOT NULL, -- GUID
column_2 VARCHAR2(255 CHAR) NOT NULL,
CONSTRAINT PK_table_1 PRIMARY KEY (ID),
CONSTRAINT UQ_table_1 UNIQUE (column_1, column_2) --
Подробнее здесь: [url]https://stackoverflow.com/questions/79169778/inserting-a-single-item-results-in-multiple-rows[/url]