我有以下映射(直接来自SA示例):
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
我正在使用MySql DB,并且该表具有innoDB引擎。
我的表中只有一条记录:1 |'user1'|'user1 test'|'password'
我用以下代码打开了一个会话:
from sqlalchemy.orm.session import sessionmaker
from sqlalchemy.engine import create_engine
from sqlalchemy.orm.scoping import scoped_session
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
db_engine = create_engine('mysql://...@localhost/test_db?charset=utf8',echo=False,pool_recycle=1800)
session_factory = sessionmaker(bind=db_engine,autocommit=False,autoflush=False)
session_maker = scoped_session(session_factory)
session = session_maker()
user_1 = session.query(User).filter(User.id==1).one()
user_1.name # This prints: u'user1'
现在,当我将数据库中的记录名称更改为“ user1_change”并提交时,然后像这样刷新对象:
session.refresh(user_1)
user_1.name # This still prints: u'user1' and not u'user1_change'
它仍然打印:u'user1',而不是u'user1_change'。
我在这里想念什么(或设置错误)?
谢谢!
从文档:
请注意,高度隔离的事务将返回与先前在同一事务中读取的值相同的值,而不管该事务外部的数据库状态如何变化
SQLAlchemy使用事务性工作单元模型,其中每个事务均假定为内部一致。会话是事务顶部的接口。由于假定事务在内部是一致的,所以SQLAlchemy仅(很好,为了解释方便...)将从数据库中检索给定的数据,并且每个事务一次更新关联对象的状态。由于您已经在同一会话事务中查询了对象,因此SQLAlchemy将不会在该事务范围内再次从数据库中更新该对象中的数据。如果要轮询数据库,则每次都需要使用一个新的事务来进行处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句