SQLAlchemy и PostGreSQL с правилом вставки, которые ничего не делают (дублируют) - PullRequest
0 голосов
/ 31 августа 2018

Я создаю API для отдыха с помощью Flask SQLAlchemy и PostGreSQL.

История моей таблицы

table_history

class H(db.Model):
    __tablename__ = "history"
    id = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True
    )
    one_data = db.Column(
        db.Integer,
        nullable=False
    )
    count = db.Column(
        db.Integer
    )

Мое правило:

CREATE OR REPLACE RULE history_no_duplicate 
  AS ON INSERT TO history WHERE 
    EXISTS ( SELECT 1 FROM history WHERE count = NEW.count)
  DO INSTEAD NOTHING

Непосредственно в SQL все вставки работают.

Мой код SQLAlchemy для вставки данных:

def save(history_data):
    db.engine.execute(
        db.insert(
            History.__table__, history_data
        )
    )
save({
    "one_data": 1,
   "count": 1
})

Без правила этот скрипт работает, но когда я вставляю правило, SQL Alchemy возвращает ошибку:

sqlalchemy.exc.NotSupportedError: (psycopg2.NotSupportedError) cannot perform INSERT RETURNING on relation "history"
HINT:  You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause.
...