Python SQLAlchemy中建模的所有关系都必须是双向的吗?
我正在学习python和sqlalchemy,并对商店和场所之间的关系进行建模。我得到错误:Python SQLAlchemy中建模的所有关系都必须是双向的吗?,python,sqlalchemy,foreign-keys,relational-database,Python,Sqlalchemy,Foreign Keys,Relational Database,我正在学习python和sqlalchemy,并对商店和场所之间的关系进行建模。我得到错误: InvalidRequestError:一个或多个映射程序未能初始化-无法 继续初始化其他映射程序。触发映射器: “Mapper | Shop | Shop”。最初的例外是:Mapper “Mapper | Locale | Locale”没有属性“shop” 当我试图从数据库中检索Lolcle时 from sqlalchemy import Column, ForeignKey, PrimaryKey
InvalidRequestError:一个或多个映射程序未能初始化-无法 继续初始化其他映射程序。触发映射器: “Mapper | Shop | Shop”。最初的例外是:Mapper “Mapper | Locale | Locale”没有属性“shop” 当我试图从数据库中检索Lolcle时
from sqlalchemy import Column, ForeignKey, PrimaryKeyConstraint, String
from sqlalchemy.orm import relationship
class Shop(maria.Base):
__tablename__ = 'shop'
__table_args__ = {'extend_existing': True }
name = Column(String(25), primary_key=True)
locale = Column(String, ForeignKey('locale.country'), primary_key=True)
url = Column(String, nullable=False)
country = relationship("Locale", back_populates='shop')
def __repr__(self):
return "{\n\tname:'%s',\n\tlocale:'%s',\n\turl:'%s'\n}" % (self.name, self.locale, self.url)
class Locale(maria.Base):
__tablename__ = 'locale'
__table_args__ = {'extend_existing': True}
country = Column(String(50), primary_key=True)
code = Column(String(11), primary_key=True)
def __repr__(self):
return "{\n\tcountry:'%s',\n\tcode:'%s'\n}" % (self.country, self.code)
SQLAlchemy ORM关系不需要是双向的。若使用参数,那个么您就是这样声明的。使用
back\u填充
还需要声明另一端:
采用字符串名称,其含义与backref
相同,只是互补属性不是自动创建的,而是必须在另一个映射器上显式配置。互补属性还应指示此关系的back\u填充
,以确保正常运行
(后一种强调)
由于您尚未在另一端声明属性,SQLAlchemy会抱怨。只需删除back\u populates
参数:
class Shop(maria.Base):
...
country = relationship("Locale")
...
SQLAlchemy ORM关系不需要是双向的。若使用参数,那个么您就是这样声明的。使用
back\u填充
还需要声明另一端:
采用字符串名称,其含义与backref
相同,只是互补属性不是自动创建的,而是必须在另一个映射器上显式配置。互补属性还应指示此关系的back\u填充
,以确保正常运行
(后一种强调)
由于您尚未在另一端声明属性,SQLAlchemy会抱怨。只需删除back\u populates
参数:
class Shop(maria.Base):
...
country = relationship("Locale")
...
否,省去
后填充
,因为区域设置
没有“店铺关系”属性。@IljaEverilä尝试过,但仍然得到相同的错误。我应该提到的是,我在iPython口译员中做了所有这些。问题是,你可能在你已经中断的课程中一遍又一遍地重新定义课程。从头开始,删除后填充的。@IljaEverilä谢谢。您能将其添加为答案以便我可以接受吗?不,省去后填充
,因为区域设置
没有“店铺关系”属性。@IljaEverilä尝试过,但仍然得到相同的错误。我应该提到的是,我在iPython口译员中做了所有这些。问题是,你可能在你已经中断的课程中一遍又一遍地重新定义课程。从头开始,删除后填充的。@IljaEverilä谢谢。你能把它作为一个答案,这样我就可以接受了吗?