python - 无法使用 SQLAlchemy 获得多对多关系以正常工作
问题描述
我有 3 张桌子;用户、位置和 location_favorite。location_favorite 有点像关联表。我试图能够为使用该表的用户创建最喜欢的位置列表。
用户类如下所示:
import datetime
from sqlalchemy import Column, Integer, String, Date, ForeignKey
from sqlalchemy.orm import relationship
from model import Base
from model.address import Address
from model.group import Group
from model.location_favorite import LocationFavorite
class User(Base):
__tablename__ = 'users'
id = Column(Integer, nullable=False, unique=True, primary_key=True)
username = Column(String, nullable=False, unique=True)
password = Column(String, nullable=False)
reset_token = Column(String, default=None)
email = Column(String, nullable=False, unique=True)
account_status = Column(Integer, nullable=False, default=0)
user_group = Column(Integer, ForeignKey("user_groups.id"), \
nullable=False, default=1)
registration_date = Column(Date, nullable=False,
default=datetime.datetime.now())
last_online = Column(Date, default=datetime.datetime.now())
# Relationships
address = relationship(Address, uselist=False, back_populates="user")
group = relationship(Group, back_populates='users')
spots = relationship("Location")
favorite_spots = relationship('Location', secondary='location_favorite',
backref='favorited_by')
位置类如下所示:
class Location(Base):
__tablename__ = 'location'
id = Column(Integer, primary_key=True, nullable=False)
title = Column(String, unique=True)
description = Column(String, nullable=False)
creator_id = Column(Integer, ForeignKey('users.id'))
latitude = Column(Float)
longtitude = Column(Float)
creation_date = Column(Date, default=datetime.now)
# Relationships
creator = relationship('User', foreign_keys=creator_id,
back_populates='spots')
events = relationship('Event')
favorited_by = relationship('User', secondary='location_favorite',
backref='favorite_spots')
location_favorite 类如下所示:
class LocationFavorite(Base):
__tablename__ = 'location_favorite'
user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
location_id = Column(Integer, ForeignKey('location.id'),
primary_key=True)
creation_date = Column(Date, default=datetime.now)
现在这给了我以下例外:
Could not determine join condition between parent/child tables on
relationship User.favorite_spots
我想这是一个合乎逻辑的响应,因为除了 user_id 之外,用户没有任何对 location_favorite 的引用,它是复合主键的一部分。我只是想不出建立这种关系的最佳方式是什么。
解决方案
推荐阅读
- swift - >.. 作为 Swift 中的后缀
- ruby-on-rails - ActionController::UnknownFormat: 新用户索引
- javascript - Leaflet L.geoJSON 可拖动
- arrays - 将目录名称和大小读入关联数组
- anaconda - 运行源激活
在 Anaconda Promt 中失败 - snowflake-cloud-data-platform - 列不匹配选项的错误在 snowsql 中不起作用
- list - 如何过滤列表
- python - 如何将高程合并到熊猫的欧几里德距离矩阵中?
- java - 当我重新打开应用程序数组列表时不存储来自 volley 的值
- graphql - 过滤或区分内置和自定义的 graphql 类型