Если у меня есть session.query (объект), который у меня был ранее session.add (объект), но еще не session.commit (), я все равно получаю объект обратно. Я ожидал, что я не получу объект с помощью session.query (), поскольку он не был добавлен в базу данных.
Как я могу проверить, был ли объект сохранен в базе данных? Спасибо.
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(100))
def __repr__(self):
return f"<User(name={self.name}>"
Base.metadata.create_all(engine)
user1 = User(name="Demo User")
Session = sessionmaker(bind=engine)
session = Session()
session.add(user1)
# session.commit()
user_from_db=session.query(User).filter(User.name=='Demo User').one()
print(user_from_db)
Вывод:
2020-02-19 15:13:10,718 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_12020-02-19 15:13:10,718 INFO sqlalchemy.engine.base.Engine ()
2020-02-19 15:13:10,718 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2020-02-19 15:13:10,718 INFO sqlalchemy.engine.base.Engine ()
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine PRAGMA main.table_info("users")
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine ()
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine PRAGMA temp.table_info("users")
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine ()
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine
CREATE TABLE users (
id INTEGER NOT NULL,
name VARCHAR(100),
PRIMARY KEY (id)
)
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine ()
2020-02-19 15:13:10,719 INFO sqlalchemy.engine.base.Engine COMMIT
2020-02-19 15:13:10,720 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2020-02-19 15:13:10,720 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name) VALUES (?)
2020-02-19 15:13:10,721 INFO sqlalchemy.engine.base.Engine ('Demo User',)2020-02-19 15:13:10,721 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id, users.name AS users_name
FROM users
WHERE users.name = ?
2020-02-19 15:13:10,721 INFO sqlalchemy.engine.base.Engine ('Demo User',)
<User(name=Demo User>