Вставка одного элемента приводит к появлению нескольких строкPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Вставка одного элемента приводит к появлению нескольких строк

Сообщение Anonymous »

Я пытаюсь представить странное поведение INSERT в моем приложении Python, которое считывает DataFrame и должно вставлять каждый элемент один за другим. Когда элемент уже существует, когда ограничение UQ дает сбой, он должен удалить его и вставить новый (мне нужно удалить строки в других связанных таблицах с помощью CASCASDE DELETE).
Ну, я Я еще не так далеко, потому что первый 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:

Код: Выделить всё

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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»