Схема 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