Python sqlalchemy ZopeTransactionExtension中的查询结果错误
我在瓶子上有申请表。该应用程序通过sqlalchemy与MySQL协同工作。启动版本我是简单的定义会话并执行提交Python sqlalchemy ZopeTransactionExtension中的查询结果错误,python,mysql,transactions,sqlalchemy,bottle,Python,Mysql,Transactions,Sqlalchemy,Bottle,我在瓶子上有申请表。该应用程序通过sqlalchemy与MySQL协同工作。启动版本我是简单的定义会话并执行提交 engine = create_engine(SQLALCHEMY_DATABASE_URI) Session = sessionmaker(bind=engine) session = Session() class Message(Base): __tablename__ = 'messages' id = Column(Integer, primary_key=Tr
engine = create_engine(SQLALCHEMY_DATABASE_URI)
Session = sessionmaker(bind=engine)
session = Session()
class Message(Base):
__tablename__ = 'messages'
id = Column(Integer, primary_key=True)
type = Column(String(30), index=True)
text = Column(Text, default='')
def add_message(self, data_message):
new_message = Message(
type=data_message.get('type'),
text=data_message.get('text'),
status=1
)
session.add(new_message)
session.commit()
return new_message
def get_messages(self)
messages = session.query(Message)\
.filter_by(type='sms', status=1)\
.order_by(Message.create_datetime)\
.all()[0:int(offset)]
return messages
一切都很好。但在造成mysql连接错误时,连接中断并重复回滚错误。
我用zope.transaction更改代码
engine = create_engine(SQLALCHEMY_DATABASE_URI)
Session = scoped_session(sessionmaker(bind=engine, extension=ZopeTransactionExtension(), expire_on_commit=False))
class Message(Base):
__tablename__ = 'messages'
id = Column(Integer, primary_key=True)
type = Column(String(30), index=True)
text = Column(Text, default='')
def add_message(self, data_message):
new_message = Message(
type=data_message.get('type'),
text=data_message.get('text'),
status=1
)
session = Session()
with transaction.manager:
session.add(new_message)
transaction.commit()
return new_message
def get_messages(self)
session = Session()
messages = session.query(Message)\
.filter_by(type='sms', status=1)\
.order_by(Message.create_datetime)\
.all()[0:int(offset)]
return messages
在这种情况下,回滚错误。但是,在查询中,get消息的工作方式与“缓存”类似。对于第一个查询,所有结果都是正确的,但继续,我手动更改MySQL中的“status”字段,不获取我的消息。只有空列表。
我正在尝试ZopeTransactionExtension('changed'),在函数中定义'session'后,mark_已更改(session)
写信问我问题。谢谢。在“with tansaction.manager”中为我解决it包装查询:
with transaction.manager:
messages = session.query(Message)\
.filter_by(type='sms', status=1)\
.order_by(Message.create_datetime)\
.all()[0:int(offset)]