Однонаправленное отображение Pony ORM Entity дает ошибку - PullRequest
0 голосов
/ 07 февраля 2019

Всегда ли сущности должны иметь двунаправленные отношения?

У меня есть 2 таблицы. Таблица A & Таблица B

Таблица A

+------+----------------+-----------+
|  id  | some_attribute | tableB_id |
+------+----------------+-----------+

id = первичный ключ

some_attribute = varchar

TableB_id = внешний ключ

TableB

+------+----------------+
|  id  | some_attribute |
+------+----------------+

id = первичный ключ

some_attribute = varchar

Как воссоздать эту связь, используя Pony ORM?

Мой текущий код:

# establish a connection with the database (MySQL)
db = Connection.Connection.connect_db_server_default()


class TableB(db.Entity):
    _table_ = "table_b"
    id = PrimaryKey(int, auto=False)
    some_attribute = Required(str)


class TableA(db.Entity):
    _table_ = "table_a"
    id = PrimaryKey(int, auto=False)
    some_attribute = Required(str)
    TableB_id = Set(TableA)

Выдает следующую ошибку:

pony.orm.core.ERDiagramError: Обратный атрибут для TableA.TableB_id не найден

1 Ответ

0 голосов
/ 08 февраля 2019

Похоже, что ошибка здесь моя, и ответ на нее указан в документации Pony-ORM.

Я предположил, что, поскольку TableB является независимой и на нее ссылаютсятаблица, она не должна иметь какого-либо отображения от себя к TableA .Тем не менее, в документации указано:

Некоторые картографы (например, Django) требуют определения отношений только на одной стороне.Пони требует явного определения отношений с обеих сторон (как гласит Дзен Python: явное лучше, чем неявное), что позволяет пользователю видеть все отношения с точки зрения каждой сущности.

А из примеров, размещенных в том же разделе документации:

# If we want to allow an instance of OrderItem to exist without
# being assigned to an 'Order', we can define the order attribute as Optional:
class Order(db.Entity):
    items = Set(lambda: Order)

class OrderItem(db.Entity):
    order = Optional(Order)

Этический урок

NE ver предположим. R прочитайте D ocumentation.- NERD

...