Reputation: 21
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?
Upvotes: 2
Views: 89
Reputation: 21
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.
Upvotes: 0
Reputation: 71
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.
Upvotes: 1