Как кэшировать таблицы базы данных в Django?
Мое приложение требует повторяющегося поиска в одних и тех же таблицах. Обычно это должно быть спроектировано с внешним ключом для ссылки из таблицы1 в таблицу2, но нет никаких внешних ключей (да, ДБ спроектирована плохо).
представления выглядят следующим образом:
class FileDownloaderSerializer(APIView):
def get(self, request, **kwargs):
filename = "All-users.csv"
f = open(filename, 'w')
datas = Userstable.objects.using(dbname).all()
serializer = UserSerializer( datas, context={'sector': sector}, many=True)
df=serializer.data
df.to_csv(f, index=False, header=False)
f.close()
wrapper = FileWrapper(open(filename))
response = HttpResponse(wrapper, content_type='text/csv')
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = "attachment; filename=%s" % filename
return response
это мой serializers.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = Userstable
fields = _all_
section=serializers.SerializerMethodField()
def get_section(self, obj):
return section.objects.using(dbname.get(pk=obj.sectionid).sectionname
department =serializers.SerializerMethodField()
def get_department(self, obj):
return section.objects.using(dbname).get(pk=obj.deptid).deptname
Есть много таблиц, более 5 таблиц, здесь я показываю только 2 из них. В основном в csv нам нужно импортировать представляемые данные. Но в главной таблице хранится только id данных, нам нужно получить фактические представляемые данные из вторичной таблицы, отсюда и поиск.
из основ программирования. Я понимаю, что python обычно кэширует переменные, которые были объявлены при запуске процесса, так что программе не нужно проходить через объявления каждый раз, когда переменная вызывается. но в моем процессе, приложение продолжает делать запросы. Я проследил весь SQL с помощью панели инструментов отладки django и получил 500 запросов, 455 - это те же самые запросы.
вот скриншот из django_debug_toolbar
Итак, каковы точные способы кэширования таблицы из БД? w