Python 具有来自其他表的多个外键的SQLalchemy表
我正在尝试学习Python 具有来自其他表的多个外键的SQLalchemy表,python,sqlalchemy,Python,Sqlalchemy,我正在尝试学习sqlalchemy,但在创建一个对象时有点困惑,该对象将进入一个表,该表具有其他两个表的外键。下面是一个简单的例子,说明我正在尝试做什么。我正在制作一个配方数据库,有三个表:配方,配料,和配方_配料配方\配料将配料链接到配方。我有这样的积累: from sqlalchemy import create_engine, Column, Integer, Text, ForeignKey from sqlalchemy.orm import relationship, scoped_
sqlalchemy
,但在创建一个对象时有点困惑,该对象将进入一个表,该表具有其他两个表的外键。下面是一个简单的例子,说明我正在尝试做什么。我正在制作一个配方数据库,有三个表:配方
,配料
,和配方_配料
<代码>配方\配料将配料链接到配方。我有这样的积累:
from sqlalchemy import create_engine, Column, Integer, Text, ForeignKey
from sqlalchemy.orm import relationship, scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine(u'sqlite:///:memory:', echo=True)
session = scoped_session(sessionmaker(bind=engine))
Base = declarative_base()
class Recipe(Base):
__tablename__ = 'recipes'
id = Column(Integer, primary_key=True)
name = Column(Text)
recipe_ingredient = relationship('RecipeIngredient', back_populates='recipe')
class Ingredient(Base):
__tablename__ = 'ingredients'
id = Column(Integer, primary_key=True)
name = Column(Text)
recipe_ingredient = relationship('RecipeIngredient', back_populates='ingredient')
class RecipeIngredient(Base):
__tablename__ = 'recipe_ingredients'
id = Column(Integer, primary_key=True)
recipe_id = Column(Integer, ForeignKey('recipes.id'))
ingredient_id = Column(Integer, ForeignKey('ingredients.id'))
recipe = relationship('Recipe', back_populates='recipe_ingredient')
ingredient = relationship('Ingredient', back_populates='recipe_ingredient')
ham = Ingredient(name='cereal')
bread = Ingredient(name='milk')
cheese = Ingredient(name='cheese')
sandwich = Recipe(name='ham and cheese')
# Now I'm not sure how to link theses
link1 = RecipeIngredient(recipe_id=sandwich.id, ingredient_id=ham.id)
link2 = RecipeIngredient(recipe_id=sandwich.id, ingredient_id=bread.id)
link3 = RecipeIngredient(recipe_id=sandwich.id, ingredient_id=cheese.id)
session.add_all([ham, bread, cheese, sandwich, link1, link2, link3])
session.commit()
这不起作用,因为
RecipeingCredit
对象。我怎样才能像这样链接外键来创建这些对象 使用ForeignKeyConstraint和ForeignKey的组合
from sqlalchemy import ForeignKeyConstraint
class RecipeIngredient(Base):
...
recipe_id = Column(Integer, ForeinKey('recipes.id'))
ingredient_id = Column(Integer)
__table_args__ = (
ForeignKeyConstraint(
["ingrediants_id"],
["ingredients.id"]
),)
...
由于这是一个重复标记,我不能留下一个答案。我所做的只是在类定义之后(即'ham='行之前)添加
Base.metadata.create_All(engine)
,它就成功了。