Эффективный способ использования CSV ДНК-информации в качестве базы данных в проекте Django - PullRequest
1 голос
/ 25 марта 2020

Я думаю о дизайне следующего Django проекта. В этом проекте у меня есть файл CSV (4 столбца, 500 строк), который я не уверен, как обращаться с базой данных. CSV выглядит следующим образом Данные содержат 500 кодов, где каждый код имеет 3 балла: f1, f2, f3. Цель веб-сайта : 1. получить от пользователя информацию о том, какие столбцы данных ему интересны и в каком порядке. например: 2X f2 1X f1 (имеется только 3 функциональных столбца: столбец f1, f2, f3 и 'code') 2. для генерации вывода кодов, который содержит самый высокий ранжирование кодов для требуемых функций в необходимом порядке.

поэтому для нашего ввода: 2X f2 1X f1 на выходе будет следующая строка: [#1 rankning code f2 column] [#2 ranking code f2 column] [#1 rankning code f1 column]

Я думал о создании базы данных с 3 столбцами: f1, f2, f3, где в каждом столбце есть коды в порядке убывания, поэтому, если пользователь хочет 5 кодов из f1, я возьму первые 5.

У меня такой вопрос: как обращаться с базой данных простым способом для ее разработки и обслуживания (не ища эффективности), которая будет правильно использовать инструменты Django?

Моим первым направлением было использование MySql и django моделей для сопоставления данных. Буду признателен за любые мысли или советы по изучению Django, поскольку я использую официальную документацию, в которой приведен пример веб-сайта «пула», который мне не нужен.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Спасибо за ваш ответ! Использование этой модели может быть отличным способом для отображения моих данных CSV! У меня есть 3 вопроса: 1) Какой простой способ на самом деле разобрать CSV в go строка за строкой и добавить эти объекты?

2) Почему следующая модель не будет проще (хотя известно, что не будет никаких изменений в полях):

class Code(models.model):
code = models.CharField(max_length=30, unique=True)
f1_score = models.IntegerField()
f2_score = models.IntegerField()
f3_score = models.IntegerField()

3) Как бы вы извлекали каждый раз коды с самым высоким рейтингом из каждого поля? например, 5 лучших рейтинга на f1

0 голосов
/ 25 марта 2020

Вот как я бы спроектировал модели, как я понимаю вашу проблему.

class Field(models.Model):
    # This model represents each of the individual fX fields, so f1, f2, f3
    name = models.CharField(max_length=15, unique=True)


class Code(models.Model):
    # This model represents the values in the first column, code.
    name = models.CharField(max_length=255, unique=True)


class FieldData(models.Model):
    code = models.ForeignKey(Code, on_delete=models.CASCADE)
    field = models.ForeignKey(Field, on_delete=models.CASCADE)
    value = models.IntegerField()

    class Meta:
        unique_together = [('code', 'field')]

Затем, когда вы обрабатываете CSV, вы должны:

  • Читать строку заголовка и используйте Field.objects.get_or_create для каждого из столбцов, следующих за кодом.
  • Прочитайте тело для создания Code экземпляров и FieldData экземпляров для каждого столбца поля в строке.

Дизайн модели придется изменить, если вам нужна история для экземпляров FieldData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...