我有2个表具有相同的列结构。
该脚本从2个不同的json来源中提取,它们的键略有不同。
我的Item类标识源,然后解析数据。
在我的Item类中,我希望能够根据数据源更改 __ tablename __ 。
这是可能的还是我需要为每个数据源编写一个单独的类?
谢谢
代码:
Base = declarative_base()
class Item(Base):
__tablename__ = 'products'
timestamp = Column(TIMESTAMP)
itemid = Column(String, primary_key=True, index=True, unique=True)
name = Column(String)
def __init__(self, item):
if type(item) == Product_A:
self.__tablename__ = "A_products"
# Parse Data
elif type(item) == Product_B:
self.__tablename__ = "B_products"
# Parse Data
答案 0 :(得分:1)
这不是一个好主意,在sqlalchemy中,每个类都应映射到单个表。一种解决方案是使两个类和一个自由函数在它们之间分配:
Base = declarative_base()
class Item_A(Base):
__tablename__ = 'A_products'
timestamp = Column(TIMESTAMP)
itemid = Column(String, primary_key=True, index=True, unique=True)
name = Column(String)
class Item_B(Base):
__tablename__ = 'B_products'
timestamp = Column(TIMESTAMP)
itemid = Column(String, primary_key=True, index=True, unique=True)
name = Column(String)
def create_item_object(item):
if isinstance(item, Product_A):
result = Item_A()
#... more stuff
elif isinstance(item, Product_B):
result = Item_B()
#... more stuff
return result