django orm返回不合时宜的对象

发布于 2025-01-25 08:31:30 字数 1926 浏览 3 评论 0 原文

该模型为

class WeeklyStrMst(BaseModel):
    StoreId = models.AutoField(primary_key=True)
    TDLinx_No = models.IntegerField(blank=True, null=True, default=None)
    Week = models.IntegerField(blank=True, null=True, default=None)
    Week_Number = models.IntegerField(blank=True, null=True, default=None)
    Year = models.IntegerField(blank=True, null=True, default=None)
    Category = models.CharField(max_length=75, blank=True, null=True, default=None)
    SeasonalPackaging = models.CharField(max_length=75, blank=True, null=True, default=None)
    Consumption = models.CharField(max_length=75, blank=True, null=True, default=None)
    Manufacturer = models.CharField(max_length=75, blank=True, null=True, default=None)
    PackType = models.CharField(max_length=75, blank=True, null=True, default=None)
    Volume = models.FloatField(blank=True, null=True, default=None)
    POS = models.FloatField(blank=True, null=True, default=None)
    StoreName = models.CharField(max_length=75, blank=True, null=True, default=None)
    MasterChain = models.CharField(max_length=75, blank=True, null=True, default=None)
    TerritoryName = models.CharField(max_length=75, blank=True, null=True, default=None)
    RegionName = models.CharField(max_length=75, blank=True, null=True, default=None)
    StoreClassification = models.CharField(max_length=75, blank=True, null=True, default=None)
    StateName = models.CharField(max_length=75, blank=True, null=True, default=None)
    class Meta:
        managed = True
        db_table = config_data[settings.REGION_NAME]['tables']['weekly_mstr']

weeklystrmst.objects.filter(StoreId__in = stores).values()

此处的商店属于列表datatype,其中包含6000-30000值,这些值是非零件,整数,所以当我执行此功能时,返回我 -

<django.db.models.query.QuerySet object at 0x0000024FD4EAAAF0>

我已经用少于2000个值进行了测试,效果很好。在这种情况下,有什么可能的原因和解决方法? 如何将大量数组作为过滤器标准传递?

The model is

class WeeklyStrMst(BaseModel):
    StoreId = models.AutoField(primary_key=True)
    TDLinx_No = models.IntegerField(blank=True, null=True, default=None)
    Week = models.IntegerField(blank=True, null=True, default=None)
    Week_Number = models.IntegerField(blank=True, null=True, default=None)
    Year = models.IntegerField(blank=True, null=True, default=None)
    Category = models.CharField(max_length=75, blank=True, null=True, default=None)
    SeasonalPackaging = models.CharField(max_length=75, blank=True, null=True, default=None)
    Consumption = models.CharField(max_length=75, blank=True, null=True, default=None)
    Manufacturer = models.CharField(max_length=75, blank=True, null=True, default=None)
    PackType = models.CharField(max_length=75, blank=True, null=True, default=None)
    Volume = models.FloatField(blank=True, null=True, default=None)
    POS = models.FloatField(blank=True, null=True, default=None)
    StoreName = models.CharField(max_length=75, blank=True, null=True, default=None)
    MasterChain = models.CharField(max_length=75, blank=True, null=True, default=None)
    TerritoryName = models.CharField(max_length=75, blank=True, null=True, default=None)
    RegionName = models.CharField(max_length=75, blank=True, null=True, default=None)
    StoreClassification = models.CharField(max_length=75, blank=True, null=True, default=None)
    StateName = models.CharField(max_length=75, blank=True, null=True, default=None)
    class Meta:
        managed = True
        db_table = config_data[settings.REGION_NAME]['tables']['weekly_mstr']

WeeklyStrMst.objects.filter(StoreId__in=stores).values()

Here stores is of list datatype containing 6000-30000 values which are non-null, integer, so when I execute this, it returns me -

<django.db.models.query.QuerySet object at 0x0000024FD4EAAAF0>

I have tested with less than 2000 values it works fine. What could be possible reason and workaround for this scenario?
How to pass a large list of array as a filter criteria?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

春风十里 2025-02-01 08:31:30

querySet class class Is 您可以在任何 loop(中使用它。 >即使在模板中)。

valuation> valution 函数返回您的词典,而不是您放心的模型实例,也是一个值得一提的。

edit -

如果您在数据库中使用SQLITE,通常会设置一个限制,可以在 queries中传递多少个值 - https://sqlite.org/limits.html 。您可以根据所使用的系统更改此值。此外,如果您要处理非常重的数据集,则最好使用更可扩展的数据库(例如Postgres或MySQL)。

The QuerySet class is iterable - you can use it inside any for loop (even in templates).

The values function returns a QuerySet of dictionaries instead of your model instances and is, rest assured, also an iterable.

Edit -

If you're using SQLite for your database, there is usually a limit set on how many values you can pass for IN queries - https://sqlite.org/limits.html. You can change this value depending on the system you're using. Besides, if you're dealing with extremely heavy datasets, you'd be better off with a more scalable database like Postgres or MySQL.

娇俏 2025-02-01 08:31:30

谢谢大家,我必须更新库MSSQL-DJANGO,较早的版本对可以传递的参数数量有限制,它们已更新。

Thank you all, I had to update the library mssql-django, the earlier version had limit on the number of parameters that can be passed, which they have updated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文