Как новичок 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()