Django ORM returns 不可迭代对象
Django ORM returns non-iterable object
模特是
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()
这里的 stores 是包含 6000-30000 个非空整数值的列表数据类型,所以当我执行这个时,它 returns me -
<django.db.models.query.QuerySet object at 0x0000024FD4EAAAF0>
我已经用少于 2000 个值进行了测试,它工作正常。这种情况的可能原因和解决方法是什么?
如何传递一个大数组列表作为过滤条件?
QuerySet class is iterable - you can use it inside any for
loop (even in templates).
values 函数 returns 字典的 QuerySet 而不是模型实例,请放心,它也是一个可迭代对象。
编辑 -
如果您在数据库中使用 SQLite,通常会限制可以为 IN
查询传递的值数量 - https://sqlite.org/limits.html。您可以根据您使用的系统更改此值。此外,如果您要处理极其繁重的数据集,最好使用可扩展性更强的数据库,例如 Postgres 或 MySQL.
谢谢大家,我不得不更新库mssql-django,早期版本对可以传递的参数数量有限制,他们已经更新了。
模特是
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()
这里的 stores 是包含 6000-30000 个非空整数值的列表数据类型,所以当我执行这个时,它 returns me -
<django.db.models.query.QuerySet object at 0x0000024FD4EAAAF0>
我已经用少于 2000 个值进行了测试,它工作正常。这种情况的可能原因和解决方法是什么? 如何传递一个大数组列表作为过滤条件?
QuerySet class is iterable - you can use it inside any for
loop (even in templates).
values 函数 returns 字典的 QuerySet 而不是模型实例,请放心,它也是一个可迭代对象。
编辑 -
如果您在数据库中使用 SQLite,通常会限制可以为 IN
查询传递的值数量 - https://sqlite.org/limits.html。您可以根据您使用的系统更改此值。此外,如果您要处理极其繁重的数据集,最好使用可扩展性更强的数据库,例如 Postgres 或 MySQL.
谢谢大家,我不得不更新库mssql-django,早期版本对可以传递的参数数量有限制,他们已经更新了。