0
我在bottle.py上有應用程序。這個應用程序通過sqlalchemy與MySQL一起工作。開始版本我是簡單的定義會話並提交。在sqlalchemy中查詢結果錯誤ZopeTransactionExtension
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消息就像'cache'一樣工作。對於第一個查詢,所有結果都是正確的,但繼續我手動更改MySQL中的字段「狀態」,並且不會收到我的消息。只有空列表。 我嘗試在函數中定義'session'之後嘗試ZopeTransactionExtension('changed'),mark_changed(session)。
寫信給我回答問題。謝謝。