我有数千家不同公司的财务报表数据。有些公司只有2019年的数据,而有些公司则有长达十年的数据。每家公司的财务报表都有自己的表格,其结构如下:
lineitem---2019---2018---2017
2.1000.800.600
3206.700.300-200
56.50.100
200.1200.90.700
这个结构比更多的平面文件结构更好,比如lineitemlineitem是一个链接到有超过10,000条记录的映射表的主键的外键。例如,3206可能意味着“对信贷机构的债务”。我还有一个companyIndex表,它有公司ID、公司名称和表名。我能够将数据输入数据库,并在python中使用sqlite3进行查询,但是高级查询有时会带来一些挑战,更不用说它可能会花费大量的时间和可读性。我喜欢在Django或SQLAlchemy中使用ORM的潜力。SQLAlchemy中的ORM似乎希望我知道我将要创建的表的名称,并希望我知道要创建多少列,但我不知道,因为我有一个脚本,该脚本分析csv中的数据集,其中包括公司ID和财务报表数据,这些数据包含了它操作的年份。此外,一年后,我将不得不用额外一年的数据更新该表。
我一直在观察和阅读教程Django和SQLAlchemy,但是由于这个最初的问题,这是我的项目成功的先决条件,所以我无法在实践中尝试太多。我已经搜索并搜索过,并检查了堆栈溢出的解决方案,但没有发现任何已解决的问题(这确实令人惊讶,因为我总是在这里找到解决方案)。
那么,如果我计划将数据插入到Django/SQLAlchemy中,那么如何使用Django/SQLAlchemy插入数据?如何让所选的表(基于公司ID或公司名称)成为ORM中的对象,就像任何其他对象一样,允许我在我想要的粒度级别选择我想要的数据?理想情况下,Django中有这样的解决方案,但是由于我没有发现任何我怀疑的东西,或者我如何构造数据库是疯狂的。
发布于 2020-04-08 21:50:00
你找不到解决办法,因为没有解决办法。您正在将输入数据格式与表架构混合。
建立初始数据库表架构,然后将数据作为行添加到表中。除非您决定必须更改架构以支持应用程序中不同的(通常是额外的)功能,否则永远不会再次触摸数据库表列,因为例如,在应用程序生存期的某个点,数据需要新的属性。不是因为有更多的数据,而是将一个或多个表中的新数据行转换为新的数据行。
因此,首先您将根据将要从某个地方读取或导入的数据记录来决定数据库表的适当模式。
然后,确保数据库是规范化的,直到第三种正常形式。你真的必须理解这。还没读过,只是略读一下,但我想是对的。这是您无法逃避的基本数据库知识。经过正确的学习和实践,它成为第二天性,你将在不知不觉中应用这些规则。
然后你的问题就会消失,你可以用你想要使用的任何关系数据库或ORM来做你想做的事情。
唯一剩下的问题是输入数据需要验证,有时没有以适当的形式提供给我们。因此,在将适当的数据行写入现有表之前,程序或初始导入过程或进一步的数据导入操作可能需要对数据进行一些更改。
https://stackoverflow.com/questions/61110101
复制相似问题