Mam następujący Mapping (prosto z przykładów SA):sqlalchemy session.refresh nie odświeżyć obiekt
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
pracuję z MySQL DB i tabela ma silnik InnoDB.
Mam pojedynczy rekord w moim tabeli: 1 | 'user1' | 'test user1' | 'password'
Mam otworzył sesję z następującego kodu:
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://[email protected]/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'
teraz, kiedy zmienić nazwę rekordu w DB do „user1_change” i zobowiązać go, a następnie odśwież przedmiotu takiego:
session.refresh(user_1)
user_1.name # This still prints: u'user1' and not u'user1_change'
nadal drukuje: u'user1' i nie u'user1_change”.
Czego tu brakuje (lub źle się tu ustawia)?
Dzięki!
Co to jest kod został użyty do popełnienia zmiany nazwy? Czy nazwa rzeczywiście zmieniła się w bazie danych? –
Lub przez "kiedy zmieniam nazwę rekordu w DB", masz na myśli, że zmieniasz rekord używając innych środków niż sesja SQLAlchemy (np. Używając czegoś takiego jak phpMyAdmin)? –
pracy z mysql-workbech, zmieniłem wartość w db i popełnione, całkowicie pod radarem SQLalchemy - ale to nie powinno mieć znaczenia, prawda? – wilfo