【问题标题】:Error while inseting flask SQLAlchemy Inserting Data in a Many-to-Many Relationship with Association Table插入烧瓶 SQLAlchemy 在与关联表的多对多关系中插入数据时出错
【发布时间】:2021-06-03 22:24:33
【问题描述】:

我有这样一个关系many2many的数据库

association_table = db.Table('association',
                             db.Column('meal_id', db.Integer, db.ForeignKey('meals.id')),
                             db.Column('order_id', db.Integer, db.ForeignKey('orders.id'))
                             )

class Order(db.Model):
    __tablename__ = 'orders'
    id = db.Column(db.Integer, primary_key=True)
    data = db.Column(db.String)
    meals = db.relationship(
        "Meals", secondary=association_table, back_populates="orders"
    )
       
class Meals(db.Model):
    __tablename__ = 'meals'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String, unique=True)
    price = db.Column(db.Float)
    orders = db.relationship(
        "Order", secondary=association_table, back_populates="meals"
    )

我尝试向表 Order 插入数据

order_to_database = Order (data='05_03_2021',
                           meals = 1
                           )

db.session.add(order_to_database)
db.session.commit()

meals 是膳食的 id。我出错了:

我应该如何解决这个问题?

【问题讨论】:

  • meals 应该是Meals 的实例,而不是整数。
  • 如何在表中插入数据?

标签: python flask sqlalchemy many-to-many


【解决方案1】:

使用db.relationship 时,ORM 期望meals 应该是Meals 的实例,而不是整数。

breakfast_meal = Meal(id=1,title='Lunch',price=9)

order_to_database = Order(data='05_03_2021')
order_to_database.meals.append(breakfast_meal)

db.session.add(order_to_database)

db.session.commit()

如果您正在使用数据库中已有的餐点,您可以这样做:

   lunch_meal = Meal.query.filter(Meal.id==10).first()
   ....
   order_to_database.meals.append(lunch_meal)
   ....
   db.session.commit()

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 2020-03-23
    • 2013-11-22
    相关资源
    最近更新 更多