Django ORM 是否具有与 SQLAlchemy 的混合属性等效的功能?

2024-05-04

In SQL炼金术 http://docs.sqlalchemy.org/en/rel_0_7/index.html, a 混合属性 http://docs.sqlalchemy.org/en/rel_0_7/orm/extensions/hybrid.html是一个property https://stackoverflow.com/questions/6618002/python-property-versus-getters-and-setters或应用于 ORM 映射类的方法,

class Interval(Base):
    __tablename__ = 'interval'

    id = Column(Integer, primary_key=True)
    start = Column(Integer, nullable=False)
    end = Column(Integer, nullable=False)

    def __init__(self, start, end):
        self.start = start
        self.end = end

    @hybrid_property
    def length(self):
        return self.end - self.start

    @hybrid_method
    def contains(self,point):
        return (self.start <= point) & (point < self.end)

    @hybrid_method
    def intersects(self, other):
        return self.contains(other.start) | self.contains(other.end)

这允许在类和实例级别有不同的行为,从而使使用相同代码评估 SQL 语句变得更简单,

>>> i1 = Interval(5, 10)
>>> i1.length
5

>>> print Session().query(Interval).filter(Interval.length > 10)
SELECT interval.id AS interval_id, interval.start AS interval_start,
interval."end" AS interval_end
FROM interval
WHERE interval."end" - interval.start > :param_1

Now in Django https://docs.djangoproject.com/en/1.4/topics/db/models/,如果我在模型上有属性,

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def _get_full_name(self):
        "Returns the person's full name."
        return '%s %s' % (self.first_name, self.last_name)
    full_name = property(_get_full_name)

这是我的理解 https://stackoverflow.com/questions/4754283/django-query-based-on-dynamic-property我可以not请执行下列操作,

Person.objects.filter(full_name="John Cadengo")

Django 中是否有相当于 SQLAlchemy 的混合属性?如果没有,是否有通用的解决方法?


你是对的,你不能应用基于 python 属性的 django queryset 过滤器,因为过滤器在数据库级别上运行。 Django 中似乎没有与 SQLAlchemy 的混合属性相当的东西。

请看一下here https://stackoverflow.com/questions/7557288/django-queryset-filter-question and here https://stackoverflow.com/questions/1205375/filter-by-property,也许它会帮助您找到解决方法。但是,我认为没有通用的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ORM 是否具有与 SQLAlchemy 的混合属性等效的功能? 的相关文章

随机推荐