2011-03-24 55 views
0

我正在使用Elixir和SQLAlchemy编写一个ORM来处理将类似电子表格的数据移动到SQL中。一般而言,类似电子表格的数据的内容是未知的,并且pyparsing分析(meta)关于来自文本文件的类似电子表格的数据的数据。执行SQLAlchemy模型定义

(例如:人口普查公布了用平面文件固定的当前人口调查,伴随着其描述数据内容,包括列规范和文档数据中的每一列)

正如我想象的那样,在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""" 

所以一个txt文件,这个模型描述了一堆坐在硬盘上的平面文件的内容。现在,如果我想利用这些平面文件到SQL,我应该

  1. 尝试编写SQL从上面

  2. 尝试写模型中的字符串代替信息来定义新的药剂/ SQLAlchemy的实体

  3. 一些第三个选项

在一天结束的时候,有什么我认为我想要的是像SQL中的数据文件一样的电子表格,如电子表格般的表格,以及用于处理所有元数据的Elixir/SQLAlchemy魔法

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

回答

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) 

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

+0

感谢您的回复。说得通。 – 2011-03-27 00:20:46