Как создать базу данных с тысячами таблиц с различным количеством столбцов одного класса в Django / SQLAlchemy ORM? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть данные финансовой отчетности по тысячам различных компаний. У некоторых компаний есть данные только за 2019 год, но для некоторых у меня есть данные за десятилетие. Каждая финансовая отчетность компании имеет свою собственную таблицу, структурированную следующим образом со столбцами, выделенными жирным шрифтом:

lineitem --- 2019 --- 2018 --- 2017
2 ..... .......... 1000 .... 800 ..... 600
3206 ........... 700 .... 300 ....- 200
56 ................. 50 .... 100 ..... 100
200 ........... 1200 .. .... 90 ..... 700

Эта структура предпочтительнее более плоской файловой структуры, такой как lineitem-year-amount, так как один запрос дает мне правильную структуру вывода для таблицы финансового отчета , lineitem - это внешний ключ, связывающий первичный ключ таблицы сопоставления с более чем 10 000 записей. 3206 может означать, например, «Долг перед кредитными учреждениями». У меня также есть таблица companyIndex, в которой есть идентификатор компании, название компании и имя таблицы. Я могу получить данные в базу данных и выполнять запросы с использованием sqlite3 в python, но сложные запросы иногда являются проблемой, не говоря уже о том, что это может занять много времени и не очень читабельно. Мне нравится потенциал использования ORM в Django или SQLAlchemy. ORM в SQLAlchemy, кажется, хочет, чтобы я знал имя таблицы, которую я собираюсь создать, и хочу, чтобы я знал, сколько столбцов создать, но я не знаю этого, так как у меня есть скрипт, который анализирует дамп данных в csv, который включает в себя идентификатор компании и данные финансовой отчетности за количество лет работы. Кроме того, через год мне придется обновить таблицу еще одним годом данных.

Я смотрел и читал учебные пособия Django и SQLAlchemy, но не смог испытать это слишком много в практика из-за этой первоначальной проблемы, которая является предпосылкой для успеха в моем проекте. Я гуглил и гуглил, и проверял стекозахват для решения, но не нашел никаких решенных вопросов (что действительно удивительно, поскольку я всегда нахожу решение здесь).

Так как я могу вставить данные, используя Django / SQLAlchemy, учитывая структуру, в которую я планирую вписаться? Как можно, чтобы выбранные таблицы (на основе идентификатора компании или названия компании) были объектами в ORM, как и любой другой объект, позволяющий мне выбирать нужные данные на желаемом уровне детализации? В идеале решение этой проблемы есть в Django, но, поскольку я ничего не нашел, я подозреваю, что его нет или то, как я структурировал базу данных, является безумием.

1 Ответ

1 голос
/ 09 апреля 2020

Вы не можете найти решение, потому что его нет. Вы смешиваете формат входных данных со схемой таблицы.

Вы устанавливаете sh исходную схему таблицы базы данных, а затем добавляете данные в виде строк в таблицы. Вы никогда больше не трогаете столбцы таблицы базы данных, если только вы не решите, что схему необходимо изменить для поддержки различных, обычно дополнительных функций в приложении, поскольку, например, в определенный момент времени жизни приложения новые атрибуты становятся необходимыми для данных. Не потому, что имеется больше данных, которые просто переводят в новые строки данных в одной или нескольких таблицах.

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

Затем убедитесь, что база данных нормализована до 3-й нормальной формы. Вы действительно должны понять это . Не читал, просто пролистал, но я предполагаю, что это правильно. Это фундаментальное знание базы данных, от которого вы не сможете избавиться. После правильного изучения, и с практикой, это становится второй натурой, и вы будете применять правила, даже не замечая этого.

Тогда ваши проблемы исчезнут sh, и вы сможете делать то, что хотите, с любой реляционной базой данных или ORM, которые вы хочу использовать.

Единственная оставшаяся проблема заключается в том, что входные данные нуждаются в проверке, и иногда они не предоставляются нам в надлежащем виде. Таким образом, программе, или начальной процедуре импорта, или дальнейшим операциям импорта данных, может потребоваться некоторая обработка данных перед записью соответствующих строк данных в существующие таблицы.

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