【问题标题】:Creating relationship between models when in separate files FLASK, SQLalchemy在单独的文件中创建模型之间的关系 FLASK,SQLalchemy
【发布时间】:2022-01-23 10:08:36
【问题描述】:

当这两个模型当前位于不同的文件夹中时,如何正确建立它们之间的外键关系?

from sqlalchemy import Column, String, Integer, DateTime, ForeignKey
from testserver.database import Base
from datetime import datetime


class Service(Base):
    __tablename__ = 'services'

    id = Column(Integer(), primary_key=True)
    name = Column(String(25), nullable=False, unique=True)
    description = Column(String(80), nullable=False)
    date_created = Column(DateTime(), default=datetime.utcnow)
    provider_id = Column(String, ForeignKey('provider.id'))
from sqlalchemy import Column, String, Integer, DateTime
from sqlalchemy.orm import relationship
from testserver.database import Base
from datetime import datetime
from testserver.database import db_session


class Provider(Base):
    __tablename__ = 'providers'

    id = Column(Integer(), primary_key=True)
    name = Column(String(25), nullable=False, unique=True)
    description = Column(String(80), nullable=False)
    date_created = Column(DateTime(), default=datetime.utcnow)
    services = relationship(
        'Service', cascade='all, delete-orphan', backref='provided_by')

from sqlalchemy.ext.declarative import declared_attr


class Base(object):
    __abstract__ = True

    @declared_attr
    def __tablename__(cls):
        return cls.__name__.lower()

上面的代码当前抛出一个错误:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'services.provider_id' could not find table 'provider' with which to generate a foreign key to target column 'id'

任何建议或解决方案将不胜感激

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案1】:

    我假设你在这里有一个错字:

    provider_id = Column(String, ForeignKey('provider.id'))
    

    在关系中,您提供了小写的模型名称,而不是表名称。如果您将provider 替换为providers(因为它是您的表的名称),它应该可以解决您的问题

    provider_id = Column(String, ForeignKey('providers.id'))
    

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2015-08-05
      • 2019-07-17
      相关资源
      最近更新 更多