У меня есть много типов авторизаций, поэтому у меня есть одна база Postgres таблицы (так называемый «» аутентификации), а также другие типы авторизаций являются производными от него. Например, объект, который получает аутентификацию с использованием пароля, называется «password_authentications» и он наследует от таблицы «« Аутентификации », используя postgres. Схема такова:Postgres наследование с SQLAlchemy: SQLAlchemy Отношения
CREATE TABLE authentications (
id
)
CREATE TABLE password_authentications (
id
password
) inherits (authentications)
Это очень элегантный, потому что у меня есть таблица под названием «Пользователи», который имеет ForeignKey в авторизаций таблице:
CREATE TABLE users (
id
username
authentications_id
)
Следовательно, пользователь может быть удостоверен все, что наследуется от аутентификации. Поэтому в будущем, если нам нужно аутентифицировать пользователей, использующих RSA (например), все, что я сделал бы, это сделать базовый класс из аутентификаций, которые описывали аутентификацию RSA.
Теперь я хочу использовать SQLAlchemy для построения сопоставления между классами Python и этой структурой. В частности, я хочу отобразить класс под названием «Пользователь» в таблицу «пользователей» (это легко сделать), но я хочу установить связь с паролем-аутентификацией (а не при аутентификации). На самом деле, я хочу динамически строить эти отношения, поэтому, если один пользователь аутентифицируется с использованием пароля, SQLAlchemy свяжет таблицу «Пользователи» с таблицей «Пароль_Аутентификация». Если существует еще один тип аутентификации, вместо этого пользователь должен быть привязан к этой таблице. Единственное, что все таблицы, с которыми Пользователь связывается, чтобы иметь общее, состоит в том, что они получены из таблицы Аутентификация. Следовательно, таблица «Пользователи» имеет в этой таблице дополнительный ключ.
Как я могу выполнить вышеуказанное? Возможно ли это?
Но в каждой таблице postgres есть столбельная колонка, которая может очень легко использоваться в качестве дискриминатора для конкретного наследования. Поэтому я не могу понять, почему это не сработает! –
Почему я не могу использовать конкретное наследование таблицы с tableoid как дискриминатор ??? –
Я считаю, что вы можете заставить его работать, но это было бы не так хорошо и портативно, как вы могли бы подумать: 1) у вас нет контроля над 'tableoid's; 2) они являются числовыми и не читаются *; 3) также вам придется жестко закодировать свои значения в своей модели Python для каждого значения «polymorphic_identity»; 4) как только вы перейдете от 'test' к' production', 'tableoid' может быть другим, поэтому вам придется изменить свою кодовую базу, чтобы она работала ... Я уверен, что есть другие оговорки, о котором я даже не могу думать, поскольку я не использую 'postresql'. – van