Самостоятельная ссылка колонка в ядре sqlalchemy - PullRequest
0 голосов
/ 06 февраля 2019

https://docs.sqlalchemy.org/en/latest/orm/self_referential.html объясняет, как столбец таблицы может ссылаться на таблицу в ORM.Как столбец может ссылаться на содержащую его таблицу в ядре SQLAlchemy?

Например, это не будет работать, поскольку person еще не определено в то время, когда на него нужно ссылаться.

import sqlalchemy as sa


metadata = sa.MetaData()

person = sa.Table(
    "person",
    metadata,
    sa.Column("person_id", sa.BigInteger, primary_key=True, autoincrement=True),
    sa.Column("mother", None, sa.ForeignKey(person.c.person_id)),
)                                         # ^ This is an errror

1 Ответ

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

Используйте строковый аргумент в форме ForeignKey, то есть 'tablename.columnkey':

person = sa.Table(
    "person",
    metadata,
    sa.Column("person_id", sa.BigInteger, primary_key=True, autoincrement=True),
    sa.Column("mother", sa.ForeignKey("person.person_id")),  # Note: no `.c.`
)

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

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