如何在Django/SQLAlchemy ORM中创建一个包含数千个不同列数的表的数据库



我有数千家不同公司的财务报表数据。有些公司只有2019年的数据,但有些公司我有长达十年的数据。每个公司的财务报表都有自己的表格,结构如下,各列用粗体表示:

行项目---2019-2018--2017
2…………..1000………800……600
3206………700………300……-200
56………50………100
200 1200………90……700

这种结构比像行项目年度金额这样的平面文件结构更可取,因为一个查询可以为我提供财务报表表输出的正确结构。lineitem是一个外键,链接到包含10000多条记录的映射表的主键。例如,3206可以表示"债务对信贷机构"。我还有一个companyIndex表,它包含公司ID、公司名称和表名。我可以在python中使用sqlite3将数据放入数据库并进行查询,但高级查询有时会有点挑战,更不用说它可能需要很多时间,而且可读性不强。我喜欢在Django或SQLAlchemy中使用ORM的潜力。SQLAlchemy中的ORM似乎想让我知道我将要创建的表的名称,并希望我知道要创建多少列,但我不知道,因为我有一个脚本可以解析csv中的数据转储,其中包括公司ID和其运营年限的财务报表数据。此外,一年后,我将不得不用一年的额外数据更新表格。

我一直在观看和阅读Django和SQLAlchemy的教程,但由于这个最初的问题,我无法在实践中尝试太多,这是我项目成功的先决条件。我在谷歌上搜索了又搜索,并查看了stackoverflow的解决方案,但没有找到任何解决的问题(这真的很令人惊讶,因为我总是在这里找到解决方案(。

那么,考虑到我计划将数据放入的结构,我如何使用Django/SQLAlchemy插入数据呢?我如何让所选的表(基于公司ID或公司名称(成为ORM中的对象,就像任何其他对象一样,允许我以所需的粒度级别选择所需的数据?理想情况下,Django中有一个解决方案,但由于我没有发现任何东西,我怀疑没有,或者我构建数据库的方式很疯狂。

您找不到解决方案,因为没有解决方案。您正在将输入数据格式与表模式混合使用。

您可以建立一个初始数据库表架构,然后将数据作为行添加到表中。除非您决定必须更改模式以支持应用程序中不同的、通常是附加的功能,否则您永远不会再接触数据库表列,因为例如,在应用程序生命周期的某个时刻,数据需要新的属性。并不是因为有更多的数据,wich只是简单地转换为一个或多个表中的新数据行。

因此,首先要根据将要读取或从某处导入的数据记录,为数据库表确定一个合适的模式。

然后你要确保数据库被规范化,直到第三个正常形式。你真的必须明白这一点。我还没读,只是略读一下,但我认为它是正确的。这是您无法逃避的基本数据库知识。在正确地学习和实践之后,它就成了第二天性,你甚至会在没有注意到的情况下应用规则。

然后你的问题就会消失,你可以对你想使用的任何关系数据库或ORM做你想做的事情。

唯一剩下的问题是,输入数据需要验证,有时它没有以正确的形式提供给我们。因此,在将正确的数据行写入现有表之前,程序、初始导入过程或进一步的数据导入操作可能需要对数据进行一些处理。

相关内容

最新更新