0

スプレッドシートのようなデータをSQLに移動する処理を行うために、ElixirとSQLAlchemyを使用してORMを作成しています。一般に、スプレッドシートのようなデータの内容は不明であり、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. いくつかの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 に答える