Создание классов, столбцы которых ссылаются на пользовательские классы в sqlalchemy - PullRequest
0 голосов
/ 26 апреля 2020

Я учусь sqlalchemy с помощью Python, и я пытаюсь настроить базу данных postgres, которая отображает структуру классов, которая есть в моем коде.

Конкретно, у меня есть следующие два классы, представляющие пользователя и элемент:

class Item(Base):
    __tablename__ = 'item'
    item_uuid = Column(UUID(as_uuid=True), primary_key=True)
    name = Column(String)

    def __init__(self, name):
        self.item_uuid = uuid.uuid1()
        self.name = name 


class User(Base):
    __tablename__ = 'users'
    user_uuid = Column(UUID(as_uuid=True), primary_key=True)
    name = Column(Integer)

    def __init__(self, name):
        self.user_uuid = uuid.uuid1()
        self.name = = name 

Эти классы правильно сопоставлены с двумя таблицами в моей базе данных (соответственно users и items), которые я создал следующим образом:

        CREATE TABLE users (
            user_uuid uuid PRIMARY KEY,
            name VARCHAR
        )        

        CREATE TABLE items (
            item_uuid uuid PRIMARY KEY,
            name VARCHAR
        )  

Теперь я хочу создать третий класс, называемый взаимодействием, свойства которого представляют собой один объект типа User и один объект типа Item, что-то вроде:

class Interaction():

    def __init__(self, user, item):
        self.user = user
        self.item = item

Я хотел бы также храните записи этого класса в моей базе данных в таблице с именем interactions таким образом, чтобы при запросе к этой таблице с помощью sqlalchemy я непосредственно получал экземпляры этого класса.

Что-то такое, что если я do

interaction = session.query(Interaction).one()

Я получаю объект interaction такой, что interaction.user является экземпляром класса User, а interaction.item является экземпляром класса Item.

Это возможно? Как мне построить таблицу БД и класс Interaction, чтобы получить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...