Ich habe eine CSV-Datei mit der ersten Zeile als Felder und verbleibenden Zeilen als Daten. Mit dieser Datei möchte ich eine Tabelle erstellen. Da die Felder ziemlich lang sind und variieren können, möchte ich sie dynamisch erstellen. Nach mehreren Versuchen und Suchen, ich dachte, ich könnte vielleicht eine Klasse von Fabrik generieren und dann zuweisen die Attribute der neuen Klasse könnte dynamische Spalten generieren. Aber es scheitert. Und basierend auf dem Fehler habe ich einige andere Methoden ausprobiert, die alle fehlgeschlagen sind. Bitte helfen Sie. Ich überlege, ob es für eine solche Idee machbar ist.wie dynamisch erstellt SQLAlchemy Spalten
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))
Der Fehler ist wie:
sqlalchemy.exc.ArgumentError: Mapper Mapper|newLIS|testonly could not assemble
any primary key columns for mapped table 'testonly'
teilweise gelöst nach dem Finden dieser http://stackoverflow.com/questions/2574105/sqlalchemy-dynamic-mapping – Nicolas