gpt4 book ai didi

python - sqlalchemy ZopeTransactionExtension 中的查询结果错误

转载 作者:行者123 更新时间:2023-11-29 23:51:46 25 4
gpt4 key购买 nike

我在 Bottle.py 上有应用程序。该应用程序通过 sqlalchemy 与 MySQL 配合使用。启动版本我简单地定义 session 并进行提交。

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

在这种情况下,会出现回滚错误。但是,在查询中获取消息的工作方式与“缓存”类似。对于第一个查询,所有结果都是正确的,但继续我手动更改 MySQL 中的字段“状态”,但没有收到我的消息。只有空列表。我在函数中定义“session”后尝试 ZopeTransactionExtension('changed'), mark_changed(session) 。

写信给我提问。谢谢。

最佳答案

对我来说,解决方案是在“with tansaction.manager”中包装查询:

with transaction.manager:
messages = session.query(Message)\
.filter_by(type='sms', status=1)\
.order_by(Message.create_datetime)\
.all()[0:int(offset)]

关于python - sqlalchemy ZopeTransactionExtension 中的查询结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25603567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com