Python SQLAlchemy Изменение __tablename__ в __init__ - PullRequest
0 голосов
/ 08 октября 2018

У меня есть 2 таблицы с одинаковой структурой столбцов.

Сценарий извлекает из 2 разных источников json с немного разными ключами.

Класс My Item определяет источник и затем анализирует данные.

В моем классе Item я хочу иметь возможность изменять __ имя таблицы __ в зависимости от источника данных.

Возможно ли это, или мне нужно написать отдельный класс длякаждый источник данных?

Спасибо,

Код:

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

1 Ответ

0 голосов
/ 08 октября 2018

Это не очень хорошая идея, в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...