sqlalchemy 查询后批量删除
时间: 2023-10-03 13:04:15 浏览: 37
可以使用 SQLAlchemy 的 delete() 方法来删除符合条件的多条记录。具体操作如下:
1. 构建查询条件,使用 filter() 方法指定符合条件的记录,例如:
```
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://root:password@localhost:3306/testdb')
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
Session = sessionmaker(bind=engine)
session = Session()
# 构建查询条件
condition = User.age > 30
query = session.query(User).filter(condition)
```
2. 删除符合条件的记录,使用 delete() 方法删除,例如:
```
query.delete(synchronize_session=False)
```
其中 synchronize_session 参数指定删除行为的同步方式,如果为 False,则不会同步到 Session 中。如果为 True,则会同步到 Session 中,但这需要花费更多时间和资源,因此建议使用 False。
完整示例代码如下:
```
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://root:password@localhost:3306/testdb')
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
Session = sessionmaker(bind=engine)
session = Session()
# 构建查询条件
condition = User.age > 30
query = session.query(User).filter(condition)
# 删除符合条件的记录
query.delete(synchronize_session=False)
# 提交会话
session.commit()
```
注意,需要在删除操作后调用 commit() 方法提交会话,否则删除的操作不会生效。