Передача данных из PostgreSQL во внешний интерфейс без ORM - PullRequest
0 голосов
/ 15 мая 2019

Я работаю над веб-приложением, но, поскольку я довольно зелен, я был бы признателен за несколько советов по поводу некоторых недостающих частей из стека. Это в основном то, что до сих пор отсутствует , из моего выбора базы данных PostgreSQL, некоторых существующих кодов Python (включая psycopg2 в качестве адаптера БД) и инфраструктуры Django, чтобы весь поток работал.

Вот предполагаемый рабочий процесс:

  1. Пользователь загружает необработанные файлы через браузер (некоторая справочная информация об этом типе файлов обобщена здесь ). Короче говоря, файл содержит сигналы, и сигналы могут иметь дикие имена, и даже количество сигналов в каждом загруженном файле часто отличается.

  2. При обработке загруженного файла серверная часть будет анализировать сигналы и сохранять их в новой таблице данных для каждого загруженного файла, где каждый столбец равен единице. сигнал и первый столбец - это временные метки для всех сигналов (мы предполагаем, что количество точек для всех сигналов одинаковое и соответствует временным меткам). На этом этапе сценарий также сохраняет метаинформацию о загруженном файле в мастер-таблицу , столбцы которой включают, помимо прочего, 1) имя таблица данных и 2) массив имен сигналов - это, по сути, массив имен столбцов в соответствующей таблице данных в том же порядке .

  3. После шага загрузки пользователь просматривает мастер-таблицу , где он / она может найти ссылки на последний загруженный файл вместе с другими файлами, которые могут были ранее загружены.

  4. Когда пользователь выбирает один «файл» из предыдущего представления, он / она фактически выбирает одну таблицу данных для работы или, если быть точным, для графика какая-то диаграмма (например, объект dygraphs ) с использованием нескольких сигналов из этой таблицы данных . Теперь таблица может содержать сто сигналов (столбцов), и нет смысла выводить их все на одну диаграмму, поэтому я планирую использовать 4 раскрывающихся списка (имен сигналов / столбцов), чтобы пользователь мог выбрать до 4 сигнала к сюжету. Страница графика должна быть «интерактивной», поэтому нет необходимости обновлять или нажимать любую кнопку отправки, когда пользователь хочет изменить один из сигналов на график.

  5. Есть еще TODO с графиком / диаграммой, но они, вероятно, не имеют отношения к этому вопросу.

На данный момент я застрял на шаге 4.

В базе данных PostgreSQL я создал эту главную таблицу , используя django.db.models. На шаге 1 я использовал django.forms.ModelForm для получения загруженного пользователем файла, а на шаге 2 при обработке каждого загруженного файла я в основном добавил одну строку в мастер-таблицу , как описано ранее. Независимо от имени необработанного файла, я использую uuid4() для переименования файла. Вероятно, стоит упомянуть, что тогда uuid является первичным ключом для мастер-таблицы . На этом же шаге я использую тот же uuid для создания отдельной таблицы в качестве моей таблицы данных для этого загруженного файла и сохраняю значения сигналов в таблице в виде столбцов данных. Это делается только через python с помощью psycopg2. После этого пользователь переводится в представление, описанное в шаге 3, для этого используется django.views.generic.ListView.

На шаге 4 - когда пользователь щелкает один из файлов в ListView на шаге 3, я использую DetailView, чтобы я мог получить массив имен сигналов из мастер-таблицы . Я создал 4 выпадающих списка, используя циклы django, каждый из которых содержит массив имен сигналов. Вот в чём дело, я не знаю, как поступить. В идеале я думаю, что это может быть разбито на несколько шагов:

а) каждый раз, когда пользователь выбирает или изменяет один сигнал из одного из выпадающих списков

b) некоторый JavaScript, чтобы ощутить это изменение и должен вызвать бэкэнд-функцию (?) Для получения меток времени и выбранного сигнала из таблицы с именем "some uuid"

c) извлекаемые данные предпочтительно представляют собой два массива (временные метки и сигнал), которые веб-интерфейс должен иметь возможность использовать для создания или обновления этого графика / диаграммы

Поскольку таблица с именем "some uuid" создается вручную, я не уверен, что ORM Django поможет мне в дальнейшем. Итак, мой вопрос - Какие методы мне нужны, чтобы остальные шаги работали?

Потенциально:

Нужен ли интерфейс?

Нужно ли создавать базу данных API?

Я не уверен, что заголовок вопроса точно обобщает природу вопроса. Любые предложения по редактированию / разработке также приветствуются. Спасибо!

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