#sqlalchemy #relationship
Вопрос:
Как реализовать взаимосвязь с помощью классического сопоставления? sqlalchemy версии 1.3.23. Упрощенная версия того, что я пробовал:
users_table = Table(
"users",
metadata,
Column("id", Integer, primary_key=True),
Column("username", String, nullable=False, unique=True),
)
markets_table = Table(
"markets",
metadata,
Column("id", Integer, primary_key=True),
Column("type", Enum(MarketTypes), nullable=False),
Column("status", Boolean, server_default="True"),
Column("user_id", ForeignKey("users.id"), nullable=False),
)
class User(object):
def __init__(self, id, username):
self.id = id,
self.username = username
class Market(object):
def __init__(self, id, type, status, user_id):
self.id = id,
self.type = type,
self.status = status,
self.user_id = user_id
mapper(Market, markets_table)
mapper(User, users_table, properties={"markets": relationship(markets_table, primaryjoin=users_table.c.id == markets_table.c.user_id)})
Проблема в том, что я не могу получить users_table.c.markets
Я нашел несколько вопросов на эту тему в stackoverflow, но ни один из них не смог мне помочь
Ответ №1:
Чтобы получить доступ к сопоставленному свойству, вы должны сделать это из класса, а не из таблицы, поэтому вместо того, чтобы вызывать его как:
users_table.c.markets
вы должны назвать это так:
User.markets from an instance of the user
То, что вы пытались, было в основном доступом к рынку столбцов в таблице пользователей, которого не существует.
Дайте мне знать, если это поможет!
Комментарии:
1. Спасибо. Это опечатка в тексте. Я пробовал разные варианты и запутался при копировании.