在SQLAlchemy中调用delete()方法后,行仍然存在的原因是delete()方法只是生成了一个DELETE语句,但并没有立即执行该语句。这是因为SQLAlchemy采用了延迟执行的策略,即在需要执行操作时才会真正执行数据库操作。
当调用delete()方法后,可以通过调用session.commit()方法来提交事务并执行删除操作。在调用commit()方法之前,可以通过session.query()方法查询被删除的行是否仍然存在。
以下是一个示例代码:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 创建数据库连接
engine = create_engine('mysql://username:password@localhost/dbname')
Session = sessionmaker(bind=engine)
session = Session()
# 删除行
session.query(User).filter(User.id == 1).delete()
# 提交事务并执行删除操作
session.commit()
# 查询被删除的行是否仍然存在
result = session.query(User).filter(User.id == 1).first()
if result is None:
print("行已被成功删除")
else:
print("行仍然存在")
# 关闭数据库连接
session.close()
在上述示例中,我们使用了MySQL数据库和SQLAlchemy库。首先,我们创建了一个数据库连接,并创建了一个会话(session)。然后,我们调用delete()方法删除了id为1的行,并通过commit()方法提交事务并执行删除操作。接着,我们使用query()方法查询id为1的行是否仍然存在,如果查询结果为None,则说明行已被成功删除,否则说明行仍然存在。
需要注意的是,SQLAlchemy中的delete()方法只是生成了一个DELETE语句,但并没有立即执行该语句。因此,在调用delete()方法后,如果不调用commit()方法提交事务并执行删除操作,行仍然会存在于数据库中。
领取专属 10元无门槛券
手把手带您无忧上云