0

我正在使用 Elixir 和 SQLAlchemy 编写一个 ORM 来处理将类似电子表格的数据移动到 SQL 中。一般来说,电子表格数据的内容是未知的,pyparsing 会从文本文件中解析(元)关于电子表格数据的数据

(例如:人口普查以平面文件的形式发布当前人口调查,并附有一个描述数据内容的 txt 文件,包括列规范和数据中每一列的文档)

正如我想象的那样,ORM 看起来像这样

class DataSet(entity)
    """a collection of many spreadsheet-like files"""
class DataFile(entity)
    """describes a single spreadsheet-like file"""
class Variable(entity)
    """describes a single column in spreadsheet-like file"""

因此,该模型描述了位于硬盘驱动器上的一堆平面文件的内容。现在,如果我想将这些平面文件转换为 SQL,我应该

  1. 尝试将 SQL 编写为字符串并替换上面编写的模型中的信息

  2. 尝试定义一个新的 Elixir/SQLAlchemy 实体

  3. 第三种选择

归根结底,我想我想要的是所有像 SQL 中的数据文件一样的电子表格,就像电子表格一样的表格,以及用于处理所有元数据的 Elixir/SQLAlchemy 魔法

我已经阅读了很多 SQLAlchemy 文档,但它们似乎都是为“所以你想写博客”类型的应用程序编写的,或者至少是在编写代码之前完全识别数据结构的应用程序。我想我正在尝试编写一个对其列规格不可知的模型。

4

1 回答 1

3

我的第一个想法是,长生不老药不会使您对解决方案有太大帮助。

我的建议是使用 2),因为您尝试根据您拥有的元数据构建一个表。(重新)阅读架构文档以了解如何以编程方式添加列,然后创建表:

http://www.sqlalchemy.org/docs/core/schema.html

例如

sqla_metadata = sqlalchemy.schema.MetaData()

type_mapping = {'int': Integer, 'text': String} # etc.
cols = []
for (col_name, col_type) in your_parsed_metadata.fields:
    cols.append(Column(col_name, type_mapping[col_type]))

cols.append(Column('datafile_id', Integer, ForeignKey("datafile.datafile_id"), nullable=False),)
new_table = Table(your_parsed_metadata.tablename, sqla_metadata, *cols)
sqla_metadata.create_all(engine)

然后你可以开始插入到你新创建的表中。您还需要跟踪生成的表数据文件之间的映射。如果模式匹配,您可以将生成的表用于另一个数据文件。

于 2011-03-26T13:09:09.107 回答