python sqlalchemy change \uuuu tablename \uuuuuuu in \uuuu init__

q7solyqu  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(277)

我有两个具有相同列结构的表。
该脚本从两个不同的json源中提取,它们的键略有不同。
我的item类标识源,然后解析数据。
在我的item类中,我希望能够根据数据源更改\uu 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
jslywgbw

jslywgbw1#

这不是一个好主意,在sqlalchemy中,每个类都应该Map到一个表。一种解决方案是创建两个类和一个自由函数在它们之间进行调度:

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

相关问题