Python Don';无法理解SQLalchemy上的错误消息
我有三个表:用户、基金和基金类型。每个基金都有一个基金类型,每个用户都有一个基金列表,每个用户也可以有一个他们创建的基金类型列表 模式:Python Don';无法理解SQLalchemy上的错误消息,python,sqlalchemy,pyramid,Python,Sqlalchemy,Pyramid,我有三个表:用户、基金和基金类型。每个基金都有一个基金类型,每个用户都有一个基金列表,每个用户也可以有一个他们创建的基金类型列表 模式: class Fund(Base): __tablename__ = 'fds_funds' fds_fund_id = Column(Integer, primary_key=True) fds_name = Column(String(128)) fds_symbol = Column(String(5)) fds_f
class Fund(Base):
__tablename__ = 'fds_funds'
fds_fund_id = Column(Integer, primary_key=True)
fds_name = Column(String(128))
fds_symbol = Column(String(5))
fds_fdt_fund_type_id = Column(Integer, ForeignKey('fdt_fund_type_id'))
fund_type = relationship('FundType', backref=backref('fds_funds', uselist=False))
class FundType(Base):
__tablename__ = 'fdt_fund_types'
fdt_fund_type_id = Column(Integer, primary_key=True)
fdt_type_name = Column(String(128))
fdt_usr_user_id = Column(Integer, ForeignKey('usr_user_id'), nullable=True)
user_funds = Table('usf_user_funds', Base.metadata,
Column('usf_usr_user_id', Integer, ForeignKey('usr_users.usr_user_id')),
Column('usf_fds_fund_id', Integer, ForeignKey('fds_funds.fds_fund_id'))
)
class User(Base):
"""
Application's user model.
"""
__tablename__ = 'usr_users'
usr_user_id = Column(Integer, primary_key=True)
usr_email = Column(Unicode(50))
_usr_password = Column('password', Unicode(64))
fund_types = relationship('FundType', foreign_keys='FundType.fdt_usr_user_id')
funds = relationship('Fund', secondary=user_funds)
我正在遵循文档,它似乎非常清楚地指出外键指定的第一个参数应该是列名,而不是表名,但我在运行initialize_DB脚本时遇到了这个错误:
sqlalchemy.exc.norReferencedTableError:与列“fdt\u fund\u types.fdt\u usr\u user\u id”关联的外键找不到表
“usr\u user\u id”,用于生成目标列的外键
“没有”
我是否误读了文档?我不确定是什么修复了它,但我重新整理了一些参考资料。对子孙后代来说,这是一个好办法:
user_funds = Table('usf_user_funds', Base.metadata,
Column('usf_usr_user_id', Integer, ForeignKey('usr_users.usr_user_id')),
Column('usf_fds_fund_id', Integer, ForeignKey('fds_funds.fds_fund_id'))
)
class User(Base):
"""
Application's user model.
"""
__tablename__ = 'usr_users'
usr_user_id = Column(Integer, primary_key=True)
usr_email = Column(Unicode(50))
_usr_password = Column('password', Unicode(64))
fund_types = relationship('FundType', foreign_keys='FundType.fdt_usr_user_id')
funds = relationship('Fund', secondary=user_funds)
class FundType(Base):
__tablename__ = 'fdt_fund_types'
fdt_fund_type_id = Column(Integer, primary_key=True)
fdt_type_name = Column(String(128))
fdt_usr_user_id = Column(Integer, ForeignKey('usr_users.usr_user_id'), nullable=True)
class Fund(Base):
__tablename__ = 'fds_funds'
fds_fund_id = Column(Integer, primary_key=True)
fds_name = Column(String(128))
fds_symbol = Column(String(5))
fds_fdt_fund_type_id = Column(Integer, ForeignKey('fdt_fund_types.fdt_fund_type_id'))
fund_type = relationship('FundType', backref=backref('funds', uselist=False))
虽然我不是百分之百确定,但我确实认为你应该把订单转一转?初始化以前用作外键的表。@1478963这可能是真的,但我不认为这是问题的原因,因为错误消息说它正在尝试查找以列命名的表。。。如果它正在寻找正确的表,但没有找到它,我会说你可能找到了一些东西。最初你在
FundType
中有ForeignKey('usr\u user\u id')
,在这个版本中,你已经修复了这个表名。