Python 与列';x、 y';不能。。。为目标列生成外键';无';

Python 与列';x、 y';不能。。。为目标列生成外键';无';,python,sqlalchemy,Python,Sqlalchemy,我正在用SQLAlchemy和SQLite创建我的第一个数据库项目。我想连接两个实体作为关系数据库的关系模型。资料来源如下: class Models(Base): __tablename__ = "models" id_model = Column(Integer, primary_key=True) name_of_model = Column(String, nullable = False) price = Column(Integer, nullable =

我正在用SQLAlchemy和SQLite创建我的第一个数据库项目。我想连接两个实体作为关系数据库的关系模型。资料来源如下:

class Models(Base):
   __tablename__ = "models"

   id_model = Column(Integer, primary_key=True)
   name_of_model = Column(String, nullable = False)
   price = Column(Integer, nullable = False)

   def __init__(self, name_of_model):
      self.name_of_model = name_of_model

class Cars(Base):

   __tablename__ = "cars"

   id_car = Column(Integer, primary_key=True)
   id_equipment = Column(Integer, nullable = False)  
   id_package = Column(Integer, nullable = False)

   id_model = Column(Integer, ForeignKey('Models'))
   model = relationship("Models", backref=backref('cars', order_by = id_model))
我想建立这样的关系:

发生的错误是:

The foreign key associated with column 'cars.id_model' could not find table 'Models' with which to generate a foreign key to target column 'None'.
有什么办法解决这个问题吗?

来自:

ForeignKey
的参数通常是以下形式的字符串
,或远程架构中的表或“所有者” 格式为
。它也可能是一个 实际
对象

Cars.id\u model
上定义您的
ForeignKey
时,您传递了类名的字符串形式(
'Models'
),该字符串形式不是可接受的形式

但是,您可以使用以下选项之一成功定义外键:

ForeignKey(Models.id_model)
这将使用实际的
对象来指定外键。这种方法的缺点是,如果名称空间中没有定义模型,则需要在名称空间中包含该列,这会增加将模型导入模块的额外复杂性,并且可能会导致您关心模型的实例化顺序。这就是为什么使用基于字符串的选项更常见的原因,例如:

ForeignKey('models.id_model')
请注意,这个示例不包括类名的字符串版本(不是Models.id\u模型),而是表名的字符串版本。字符串版本意味着只在需要时才解析所需的表对象,因此避免了处理
对象本身的复杂性

在这种情况下,另一个有趣的例子是:

如果两个表中的两列名称相同,SQLAlchemy似乎会从表中推断出该列。如果您在示例中更改了
id\u model
列定义中任一列的名称,使它们的名称不同,这将停止工作。此外,我还没有发现这是一个很好的文件,它是不明确的,所以不确定是否真的值得使用,我真的只是提到完整性,因为我觉得它很有趣。的源代码中关于
arg:

    # A FK between column 'bar' and table 'foo' can be
    # specified as 'foo', 'foo.bar', 'dbo.foo.bar',
    # 'otherdb.dbo.foo.bar'. Once we have the column name and
    # the table name, treat everything else as the schema
    # name.

请修改格式。图片有问题吗?缩进完全错误。例如,
\u tablename\u=“models”
应该与
类模型(基本)相比缩进:
ForeignKey()
tablename.column\u name
作为其参数。制作此:
ForeignKey('Models')
,此:
ForeignKey('Models.id\u model')
    # A FK between column 'bar' and table 'foo' can be
    # specified as 'foo', 'foo.bar', 'dbo.foo.bar',
    # 'otherdb.dbo.foo.bar'. Once we have the column name and
    # the table name, treat everything else as the schema
    # name.