Схема SQLAlchemy, которая позволяет двум таблицам совместно использовать столбец первичного ключа

Скажем, у меня есть два стола, фу и бар. Оба имеют первичные ключи. Я хочу настроить его в SQLAlchemy, чтобы объединенный набор foo.id и bar.id был уникальным. Как бы я это сделал?

Я попытался добавить еще одну таблицу, содержащую только первичные ключи и имеющую внешние ключи в foo и bar, вот так:

class foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, ForeignKey('primary_keys.id'), primary_key=True) 

class bar(Base):
    __tablename__ = 'bar'
    id = Column(Integer, ForeignKey('primary_keys.id'), primary_key=True) 

class primary_keys(Base):
    __tablename__ = 'primary_keys'
    id= Column(Integer, primary_key=True)

Но это дало мне эту ошибку:

FlushError: Экземпляр имеет нулевой идентификационный ключ. Если это автоматически сгенерированное значение, убедитесь, что таблица базы данных позволяет генерировать новые значения первичного ключа и что сопоставленный объект Column настроен на ожидание этих сгенерированных значений. Также убедитесь, что этот flush() не выполняется в неподходящее время, например, в событии load().

Может быть, есть лучшее решение для того, что я пытаюсь сделать?

РЕДАКТИРОВАТЬ: я использую БД sqlite.

1 ответ

Если вы используете postgresql или oracle, то первичные ключи foo и bar могут быть определены для использования одинаковых последовательностей.

http://docs.sqlalchemy.org/en/rel_1_0/core/defaults.html

table = Table("cartitems", meta,
    Column("cart_id", Integer, Sequence('cart_id_seq'), primary_key=True),
)

объект последовательности будет в основном делать то, что вы пытаетесь сделать с вашей таблицей primary_keys

Другие вопросы по тегам