Tôi có tệp csv với dòng đầu tiên là trường và các dòng còn lại làm dữ liệu. Với tập tin này tôi muốn tạo một bảng. Vì các trường khá dài và có thể thay đổi, tôi muốn tự động tạo nó. Sau nhiều lần thử và tìm kiếm, tôi đã tìm ra rằng tôi có thể tạo ra một Class từ nhà máy và sau đó gán các thuộc tính cho lớp mới có thể tạo ra các cột động. Nhưng nó không thành công. Và dựa trên lỗi, tôi đã thử một số phương pháp khác, tất cả đều thất bại. Hãy giúp tôi. Tôi đang xem xét cho dù đó là doable cho một ý tưởng như vậy.cách tự động tạo các cột 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))
Lỗi này là như sau:
sqlalchemy.exc.ArgumentError: Mapper Mapper|newLIS|testonly could not assemble
any primary key columns for mapped table 'testonly'
được giải quyết một phần sau khi tìm http://stackoverflow.com/questions/2574105/sqlalchemy-dynamic-mapping – Nicolas