我想通过这样的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应该在这种情况下执行插入而不是更新。
有没有办法解决这个问题?