2011-01-13 6 views
12

フィールドとして最初の行と残りの行をデータとして持つCSVファイルがあります。このファイルを使用して、テーブルを作成します。フィールドはかなり長く、変化する可能性があるので、私は動的に作成したい。 いくつかの試して検索した後、私はおそらく工場からクラスを生成し、新しいクラスの属性を割り当てて動的な列を生成できると考えました。しかしそれは失敗する。そしてそのエラーに基づいて、私はいくつかの他の方法を試みました、すべて失敗しました。助けてください。私はそれがそのような考えのために実行可能かどうか検討しています。SQLAlchemy列を動的に作成する方法

Reader = csv.reader(open('Book1.csv', 'rb'), delimiter=',', quotechar='|') 
TableItem = Reader.next()[0:] 
def Factory(*args, **kwargs): 
    args=args[0] 
    def init(self, *iargs, **ikwargs): 
     #setattr(self,__tablename__,ikwargs[__tablename__]) 
     for k,v in kwargs.items(): 
      setattr(self, k, v) 
     for i in range(len(iargs)): 
      setattr(self, args[i], iargs[i]) 
     for k,v in ikwargs.items(): 
      setattr(self, k, v) 

    name = kwargs.pop("name", "myFactory") 
    kwargs.update(dict((k, None) for k in args)) 
    return type(name, (object,), {'__init__': init}) 

LIS=Factory(TableItem) 
class newLIS(LIS,Base): 
    __tablename__='testonly' 
    pass 
mytest=[] 
for row in Reader: 
    mytest.append(newLIS(row)) 

エラーは次のようである:

sqlalchemy.exc.ArgumentError: Mapper Mapper|newLIS|testonly could not assemble 
any primary key columns for mapped table 'testonly' 
+0

これを見つけた後に部分的に解決しました。http://stackoverflow.com/questions/2574105/sqlalchemy-dynamic-mapping – Nicolas

答えて

12

私は、関連する答えの作者だ:

sqlalchemy dynamic mapping

私はだと思う別の質問にこの答えを持っていますさらに関連性があります - それは重複することさえできます:

Database on the fly with scripting languages

ご覧のとおり、テーブルオブジェクトを作成してクラスにマッピングする必要があります。また、sqlalchemyのマップされたクラスでは、テーブルにプライマリキーが必要なので、追加する必要があります。それ以外に他の問題がありますか?更新されたコードを貼り付けることはできますか?

+0

ご返信ありがとうございます。はい、そのデモはまさに私が探したいものです。 – Nicolas

関連する問題