Ограничение поля значениями в названном удаленном столбце - PullRequest
0 голосов
/ 14 февраля 2020

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

Однако, используя следующий код, я хотел бы иметь только одно поле вместо числового c ID и ссылка на другой объект. Я ожидал, что этот код выдаст исключение, так как второй рецепт указывает кухню, которой нет в базе данных. Есть что-то, что я c не получаю ...

from sqlalchemy import Column, create_engine, ForeignKey, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()


class Cuisine(Base):
    __tablename__ = 'cuisines'

    name = Column(String, primary_key=True)


class Recipe(Base):
    __tablename__ = 'recipes'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    cuisine = Column(String, ForeignKey('cuisines.name'), nullable=False)


Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

se_cuisine = Cuisine(name="Swedish")
session.add(se_cuisine)

r1 = Recipe(name="Ärtsoppa", cuisine="Swedish")
session.add(r1)

r2 = Recipe(name="Flæskesvær", cuisine="Danish")
session.add(r2)

for r in session.query(Recipe).all():
    print("Recipe: %-14s Cuisine: %s" % (r.name, r.cuisine))

session.commit()
...