Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy ZopeTransactionExtension中的查询结果错误_Python_Mysql_Transactions_Sqlalchemy_Bottle - Fatal编程技术网

Python sqlalchemy ZopeTransactionExtension中的查询结果错误

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

我在瓶子上有申请表。该应用程序通过sqlalchemy与MySQL协同工作。启动版本我是简单的定义会话并执行提交

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)]