动态创建类成员sqlalchemy

时间:2018-07-10 21:26:22

标签: python sqlalchemy splat

我有一个元组数据:

('dave', 23, 'm'),
('alice', 33, 'f'),
('mary', 44, 'f')

我有一个sqlalchemy基类:

class People(Base):
    __tablename__='people'

我希望能够使用上面的元组中的数据为此类动态创建列/字段

最终结果将是:

class People(Base):
    __tablename__='people'

    dave = Column(String)
    alice = Column(String)
    mary = Column(String)

但是,我不知道如何使用splat运算符创建字段。

1 个答案:

答案 0 :(得分:0)

解决方案-

edtl_schematic = {
    '__tablename__': 'fedex_shipments'
}

for c in cols:
    (column, db_name, db_type) = c
    edtl_schematic[c[1]] = Column(db_name, eval(db_type),primary_key=True if db_name=='ship_trk_num' else False)


ExtendedShipmentDetail=type('ExtendedShipmentDetail',(Base,),edtl_schematic)
Base.metadata.create_all(engine)

cols是一个元组,其中包含从具有Sheet Column | DB Name | DB Type列的excel工作表加载的信息,其中DB Name是我希望excel工作表列在数据库中具有的名称,并且DB Type是sqlalchemy类型。不管这是否是正确的方法,都可以。