session.query возвращает объект, которого нет в db - sqlalchemy - PullRequest
1 голос
/ 19 февраля 2020

Если у меня есть 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...