在 SQLAlchemy 中,expunge
是一个方法,用于从当前 Session
的状态中移除一个对象,使其不再与 Session
关联。这意味着,尽管对象本身可能仍然存在,但它将不再被 Session
跟踪其状态变化。
当你调用 expunge
方法时,你传递一个已经添加到 Session
中的对象作为参数。之后,这个对象将不再被视为 Session
的一部分,任何对其状态的更改都不会被 Session
捕获,并且在后续的 flush
或 commit
操作中也不会被同步到数据库。
以下是 expunge
方法的一个简单示例:
python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
# 假设数据库已经配置好,并且表已经创建
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
# 创建一个新的 User 对象并添加到 session
new_user = User(name='Alice')
session.add(new_user)
session.flush() # 将对象同步到数据库,但此时事务还未提交
# 现在,从 session 中移除这个对象
session.expunge(new_user)
# new_user 对象现在不再与 session 关联
# 对 new_user 的任何更改都不会被 session 跟踪,也不会被同步到数据库
# 提交事务(由于已经 expunge,new_user 的状态变化不会被提交)
session.commit()
在这个例子中,我们首先创建了一个新的 User
对象并将其添加到 Session
中。然后,我们调用 flush
方法将对象的状态同步到数据库(但此时事务还未提交)。接着,我们调用 expunge
方法从 Session
中移除这个对象。最后,我们提交事务,但由于 new_user
已经被 expunge
了,所以对其的任何更改都不会被提交到数据库。
请注意,expunge
并不会从数据库中删除对象,它只是从 Session
的状态中移除对象。如果你想要从数据库中删除对象,你应该使用 delete
方法。