2011-03-24 57 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