Как переписать `id` в качестве первичного ключа с помощью` timestamp` в качестве первичного ключа в моделях django? - PullRequest
0 голосов
/ 18 мая 2019

Я создаю движок Django ETL, который извлекает данные из GitHub с использованием корпоративного API для сбора показателей внутренней совместной работы компании.Я разработал схему, которая, как я теперь понимаю, не будет масштабироваться из-за PK (первичного ключа), который автоматически устанавливается ORM.Одна из главных особенностей извлечения - получить id человека, который создал репозиторий, прокомментировал сообщение и т. Д.

Сначала я хотел, чтобы ORM автоматически установил id как PK, но это не будет работать, так как запрос GET будет выполняться раз в неделю, и это вызовет ошибки, приводящие к перезаписи первичного ключа ID.

У меня естьЯ провел некоторое исследование, и одно из возможных решений - создать метакласс, на который есть ссылка: Первичный ключ модели Django в виде пары

, но я не уверен, что создание нескольких мета-классов приведет к поражению.вся точка мета-класса для начала.

Вот схема, которую я настроил для models.py

from django.db import models
from datetime import datetime

""" Contruction of tables in MySQL instance """


class Repository(models.Model):
    id = models.PositiveIntegerField(null=False, primary_key=True)
    repo_name = models.CharField(max_length=50)
    creation_date = models.CharField(max_length=21, null=True)
    last_updated = models.CharField(max_length=30, null=True)
    qty_watchers = models.PositiveIntegerField(null=True)
    qty_forks = models.PositiveIntegerField(null=True)
    qty_issues = models.PositiveIntegerField(null=True)
    main_language = models.CharField(max_length=30, null=True)
    repo_size = models.PositiveIntegerField(null=True)
    timestamp = models.DateTimeField(auto_now=True)

class Contributor(models.Model):
    id = models.IntegerField(null=False, primary_key=True)
    contributor_cec = models.CharField(max_length=30, null=True)
    contribution_qty = models.PositiveIntegerField(null=True)
    get_request = models.CharField(max_length=100, null=True)
    timestamp = models.DateTimeField(auto_now=True)


class Teams(models.Model):
    id = models.IntegerField(primary_key=True, null=False)
    team_name = models.CharField(max_length=100, null=True)
    timestamp = models.DateTimeField(auto_now=True)


class TeamMembers(models.Model):
    id = models.IntegerField(null=False, primary_key=True)
    team_member_cec = models.CharField(max_length=30, null=True)
    get_request = models.CharField(max_length=100, null=True)
    timestamp = models.DateTimeField(auto_now=True)


class Discussions(models.Model):
    id = models.IntegerField(null=False, primary_key=True)
    login = models.CharField(max_length=30, null=True)
    title = models.CharField(max_length=30, null=True)
    body = models.CharField(max_length=1000, null=True)
    comments = models.IntegerField(null=True)
    updated_at = models.CharField(max_length=21, null=True)
    get_request = models.CharField(max_length=100, null=True)
    timestamp = models.DateTimeField(auto_now=True)

Есть ли способ перезаписать поле id исделать поле PK timestamp, так как каждый раз, когда запускается GET request, это поле будет заполняться статическими данными, которые не будут изменяться в течение срока службы приложения?

В качестве альтернативы, есть ли способброситьch архитектура многостолового наследования и что-то другое?

Основные показатели, которые я буду извлекать из этого, - это такие вещи, как top contributor to repository, repository with most commits, most replied to comments.Я хотел бы иметь возможность запустить какое-то filters для данных, чтобы извлечь эти метрики, но я знаю, что это сильно зависит от настройки схемы.

Спасибо!

1 Ответ

0 голосов
/ 18 мая 2019

Способ задания поля в качестве первичного ключа:

field_name = models.FieldType(primary_key=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...