Актуализировать и дополнить таблицу PostgreSQL из представления MSSQL. Django
Задача должна выполняться с интервалом в 15 минут, поэтому требуется не "тяжелое" решение.
Django 4.0.3 - связан с двумя БД, MSSQL и PostgreSQL(default).
Цель - в таблице LinkPostgreSQL
должны храниться исключительно актуальные дополненные записи в соответствии с ViewMSSQL
(ненужное удаляется, а нужное добавляется или обновляется).
models.py
class LinkPostgreSQL(models.Model):
''' Table из БД PostgreSQL '''
link = models.IntegerField()
num_reg = models.CharField(max_length=100, blank=True, null=True)
xml = models.TextField(blank=True, null=True)
json_data = models.JSONField(blank=True, null=True)
class Meta:
managed = True
def __str__(self):
return str(self.id)
class ViewMSSQL(models.Model):
''' View из БД MSSQL '''
link = models.IntegerField(primary_key=True)
num_reg = models.CharField(max_length=100, blank=True, null=True)
xml = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'view_mssql'
def api_request(lst:list=[]):
'''
Принимает список словарей
[{link:'1234567', num_reg:'14198465749874', items:['726345081634598273564762154','826345081634598273564762154']}]
Ответ записывается для каждого словаря dict_n['json_data'] = json_data
'''
pass
- Необходимо получить данные из
ViewMSSQL
(их может быть значительно больше 1000) - Проверить их наличие в
LinkPostgreSQL
по полям[link, num_reg]
а так же по полюxml
(xml
думаю можно хешировать для сравнения)
еслиxml
не совпадает, его необходимо обновитьxml
изViewMSSQL
. - Перед тем как записать или обновить данные, необходимо при помощи
api_request([{}])
обратиться(с уже отфильтрованными данными) к API и получитьjson_data
. - После того как получен
json_data
дополнитьLinkPostgreSQL.json_data
- Имея дополненные данные
сохранить
,обновить
иудалить не нужные
записи вLinkPostgreSQL
.
-- Хеш получаю так:
hashlib.md5(text.encode('utf-8')).hexdigest()
Данные для работы так:
pg_data = list(models.ViewMSSQL.objects.using('PostgreSQL').all().values())
ms_data = list(models.LinkPostgreSQL.objects.all().values())
Запрос к API так:
api_request(lst=ms_data):