如何在PeeWee模型中创建动态生成的价值?

2024-05-13 20:50:49 发布

您现在位置:Python中文网/ 问答频道 /正文

在我目前使用的ORMs中,有一个选项可以添加一个值(field?)为了建模,它不存储在数据库中,而是使用其他值来构造。你知道吗

下面是一个简单的例子:

class MediaFile(BaseModel):
    ID = IntegerField()
    FileName = str(ID) + ".jpg"

所以有存储在数据库中的ID,和由ID构造的FileName。上面的例子当然在PeeWee中不起作用,因为IDIntegerField,而不是我需要的int。你知道吗

我怎么能在皮维做这种事?它叫什么名字?你知道吗


Tags: id数据库field选项filename建模class例子
1条回答
网友
1楼 · 发布于 2024-05-13 20:50:49

如果您只想访问存储在数据库中的而不是的属性,请记住peewee模型只是Python类:

class MediaFile(BaseModel):
    ID = AutoField()  # You should probably use this for auto-inc IDs.

    @property
    def FileName(self):
        return str(self.ID) + '.jpg'

有关希望同时用作SQL构造和计算实例值的更复杂的操作,请参见hybrid properties。使用混合特性的示例:

class Interval(Model):
    start = IntegerField()
    end = IntegerField()

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

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

通过这种混合属性和混合方法,我们可以在模型实例的SQL查询中使用这些属性。所以我们最终可以做如下事情:

query = Interval.select().where(Interval.contains(2))

将生成以下SQL:

SELECT "id", "start", "end"
FROM "interval" AS t1
WHERE (("start" <= 2) AND (2 < "end"))

但我们也可以:

obj = Interval(start=1, end=10)
obj.contains(2)  # returns True

相关问题 更多 >