Python session.query返回不在db-sqlalchemy中的对象
如果我在session.queryobject之前有session.addobject,但还没有session.commit,我仍然会将该对象取回。我的期望是,我不会使用session.query获取对象,因为它尚未添加到数据库中 如何验证对象是否已存储在数据库中?谢谢Python session.query返回不在db-sqlalchemy中的对象,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,如果我在session.queryobject之前有session.addobject,但还没有session.commit,我仍然会将该对象取回。我的期望是,我不会使用session.query获取对象,因为它尚未添加到数据库中 如何验证对象是否已存储在数据库中?谢谢 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy impor
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>
看到了吗:这是自动刷新,正如@Shubhamoli@Shubhamoli链接的答案中所指出的那样。谢谢。看这个:这是自动刷新,正如@Shubhamoli@Shubhamoli链接的答案所指出的那样。非常感谢。