SQLAlchemy: внешний ключ для нескольких таблицPython

Программы на Python
Anonymous
SQLAlchemy: внешний ключ для нескольких таблиц

Сообщение Anonymous »

Рассмотрим 3 таблицы:
  • книги
  • Американские авторы
  • Британские авторы
Каждая книга имеет внешний ключ к ее автору, который может находиться либо в американской таблице, либо британский.

Как реализовать такое условие внешнего ключа в SQLAlchemy?

Мне бы хотелось иметь один столбец для обработки ссылки.



Мой подход до сих пор заключался в создании абстрактный класс Author, от которого наследуются AmericanAuthor и BritishAuthor, а внешний ключ Book указывает на родителя.

Код: Выделить всё

class Author(Model):
__abstract__ = True
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)

class AmericanAuthor(Author):
__tablename__ = 'american_author'
# some other stuff

class BritishAuthor(Author):
__tablename__ = 'british_author'
# some other stuff

class Book(Model):
__tablename__ = 'book'
title = db.Column(db.String)
author_id = db.Column(db.Integer, db.ForeignKey("author.id"))
Не работает с ошибкой:

Код: Выделить всё

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'books.author_id' could not find table 'author' with which to generate a foreign key to target column 'id'
Это вполне логично, учитывая, что автор является абстрактным...

Подробнее здесь: https://stackoverflow.com/questions/570 ... ple-tables

Вернуться в «Python»