Ограничения внешнего ключа в SQLAlchemy - PullRequest
5 голосов
/ 23 мая 2011

Я использую сторону ORM SQLAlchemy, и я определил один из моих столбцов, чтобы иметь отношение внешнего ключа к другой модели, используя:

Base = declarative_base()
class Model1(Base):
    __tablename__ = 'm1'
    Name = Column(String, primary_key = True)
    info = Column(String)

class Model2(Base):
    __tablename__ = 'm2'
    Name = Column(String, primary_key = True)
    info = Column(String)
    other_model = Column(String, ForeignKey('m1.Name'))

Однако, это не похожечто бы я ни указывал в атрибуте other_model, кажется более чем счастливым зафиксировать его в базе данных, даже если не существует экземпляра Model1 с таким значением Name.

1 Ответ

3 голосов
/ 24 мая 2011

Похоже, ответ был в базе данных, которую я использовал (SQLite), а не в SQLAlchemy.Версии SQLite <3.6.1 (AFAIK) не поддерживают ограничения внешнего ключа. </p>

Поэтому ответ очень похож на этот ответ для внешних ключей и SQLAlchemy .

AsЯ использую Windows, я смог перейти на страницу pysqlite2 , упакованные установщики имеют версию 3.7.6.2 sqlite, а затем и окончательная реализация помогла этой странице SQLAlchemy на движках sqliteи диалекты .Этот SO вопрос также имеет отношение к процессу обновления.

Наконец, механизм SQLite немного темпераментен при принятии решения о применении ограничения внешнего ключа или нет, и этот SO вопрос весьма полезен для принудительного применения внешнего ключа.

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