SQLAlchemy会话从查询插入结果

时间:2018-10-05 10:58:05

标签: python postgresql sqlalchemy

我想通过这样的SQLAlchemy会话将数据从查询插入到我的postgres数据库中。

这些是我的模特:

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:对表'query_model'的UPDATE语句预期将更新1行;匹配了0个。

我在此stackoverflow thread中阅读了有关它的内容,但情况不同。我没有查询与定义的模型相同的表。因此,理想情况下,SQLAlchemy应该在这种情况下执行插入而不是更新。

有没有办法解决这个问题?

0 个答案:

没有答案