フィールドとして最初の行と残りの行をデータとして持つ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'
これを見つけた後に部分的に解決しました。http://stackoverflow.com/questions/2574105/sqlalchemy-dynamic-mapping – Nicolas