Результат вставки сеанса SQLAlchemy из запроса - PullRequest
0 голосов
/ 05 октября 2018

Я хочу вставить данные в мою базу данных postgres из запроса через сеанс SQLAlchemy, как это.

Это мои модели:

class TestModel(Base):
__tablename__ = 'test_model'

timestamp = Column(Numeric, primary_key=True)
num1 = Column(Numeric)
num2 = Column(Numeric)

def __init__(self, timestamp, num1, num2):
    self.timestamp = timestamp
    self.num1 = num1
    self.num2 = num2

class QueryModel(Base):
__tablename__ = 'query_model'

date = Column(Date, primary_key=True)
num1 = Column(Numeric)
num2 = Column(Numeric)

def __init__(self, date, num1, num2):
    self.date = date
    self.num1 = num1
    self.num2 = num2

Что я хочу сделать, это "поставить"результат моего запроса в мою модель и ВСТАВИТЬ или ОБНОВИТЬ его в таблицу QueryResult.

query = """select to_date(timestamp::text, 'YYYYMMDDHH24') as date
               ,sum(num1) as num1
               ,avg(num2) as num2
        from test_model
        group by date"""

with get_session() as session:
    result = session.query(QueryModel).from_statement(query).all()
    for i in result:
        i.num2 = i.num1 + i.num2
        session.add(i)
    session.commit()

Я получаю следующее исключение: sqlalchemy.orm.exc.StaleDataError: оператор UPDATE для таблицы 'query_modelожидается обновление 1 строки;Было найдено 0 совпадений.

Я читал об этом в этой теме stackoverflow , но мой случай другой.Я не запрашиваю ту же таблицу, что и в определенной модели.Поэтому в идеале SQLAlchemy должна выполнять вставку вместо обновления.

Есть ли способ решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...