如何创建连接到客户mysql的收藏夹表

时间:2016-03-16 17:47:21

标签: python mysql sqlalchemy

我正在尝试在mysql中实现一个收藏夹表,允许用户通过id号将餐馆对象添加到表中。以下是基本概要: 有些客户包含唯一ID和其他内容。然后有些餐厅包含一个独特的ID和其他东西。我希望顾客能够拥有最爱。我制作了一个有客户ID的收藏夹表 - 这是我查找客户收藏夹的方式 - 但后来我必须硬编码一定数量的列,我可以存储独特的餐厅ID#s英寸

将列动态添加到收藏夹数据库是否有意义?

1 个答案:

答案 0 :(得分:1)

没有。这是一个多对多的关系,实现这一点的通常方法是通过这样的连接表:

users
+----+------+
| id | name |
+----+------+
|  1 | John |
|  2 | Jill |
+----+------+

restaurants
+----+------------+
| id |    name    |
+----+------------+
|  1 | McDonald's |
|  2 | Subway     |
|  3 | Chipotle   |
+----+------------+

favorites
+---------+---------------+
| user_id | restaurant_id |
+---------+---------------+
|       1 |             2 |
|       1 |             3 |
|       2 |             3 |
+---------+---------------+

favorites表格中的每一行都是"用户收藏的餐厅"关系。在这种情况下,没有人喜欢麦当劳,约翰已经偏爱地铁,约翰和吉尔都喜欢Chipotle。

SQLAlchemy对此模式有很好的支持:

class Favorite(Base):
    __tablename__ = "favorites"
    user_id = Column(Integer, ForeignKey("users.id"), primary_key=True)
    restaurant_id = Column(Integer, ForeignKey("restaurants.id"), primary_key=True)

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    ...
    favorites = relationship("Restaurant", secondary=Favorite.__table__)

class Restaurant(Base):
    __tablename__ = "restaurants"
    id = Column(Integer, primary_key=True)
    ...