1

If I session.query(object) that I have previously session.add(object) but not yet session.commit() I still get the object back. My expectation was that I would not get the object with session.query() since it has not been added to the database.

How can I verify if the object has been stored in the database? Thanks.

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)

Output:

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>

0 Answers0