session.query(User).filter(User.id.in_((1, 2, 3))).delete(synchronize_session=False)
session.commit() # or session.expire_all()
此外,update 操作也有同样的参数,如果后面立刻提交了,那么加上 synchronize_session=False 参数会更快。
如何扩充模型的基类?
declarative_base() 会生成一个 class 对象,这个对象的子类一般都和一张表对应。如果想增加这个基类的方法或属性,让子类都能使用,可以有三种方法:
1.定义一个新类,将它的方法设置为基类的方法:
class ModelMixin(object):
@classmethod
def get_by_id(cls, session, id, columns=None, lock_mode=None):
if hasattr(cls, 'id'):
scalar = False
if columns:
if isinstance(columns, (tuple, list)):
query = session.query(*columns)
else:
scalar = True
query = session.query(columns)
else:
query = session.query(cls)
if lock_mode:
query = query.with_lockmode(lock_mode)
query = query.filter(cls.id == id)
if scalar:
return query.scalar()
return query.first()
return None
BaseModel.get_by_id = get_by_id
@classmethod
def get_all(cls, session, columns=None, offset=None, limit=None, order_by=None, lock_mode=None):
if columns:
if isinstance(columns, (tuple, list)):
query = session.query(*columns)
else:










