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')
,在这个版本中,你已经修复了这个表名。