SQLAlchemy - can you add custom methods to the query object?

后端 未结 3 552
花落未央
花落未央 2020-12-05 13:41

Is there a way to create custom methods to the query object so you can do something like this?

User.query.all_active()

Where all_acti

3条回答
  •  自闭症患者
    2020-12-05 14:10

    To provide a custom method that will be used by all your models that inherit from a particular parent, first as mentioned before inherit from the Query class:

    from flask_sqlalchemy import SQLAlchemy, BaseQuery
    from sqlalchemy.inspection import inspect
    
    class MyCustomQuery(BaseQuery):
        def all_active(self):
            # get the class
            modelClass = self._mapper_zero().class_
            # get the primary key column
            ins = inspect(modelClass)
            # get a list of passing objects
            passingObjs = []
            for modelObj in self:
                if modelObj.is_active == True:
                    # add to passing object list
                    passingObjs.append(modelObj.__dict__[ins.primary_key[0].name])
            # change to tuple
            passingObjs = tuple(passingObjs)
            # run a filter on the query object
            return self.filter(ins.primary_key[0].in_(passingObjs))
    
    # add this to the constructor for your DB object
    myDB = SQLAlchemy(query_class=MyCustomQuery)
    

    This is for flask-sqlalchemy, for which people will still get here when looking for this answer.

提交回复
热议问题