python - 我找不到如何在 sqlalchemy 中设置关系
问题描述
我正在编写一个与 PostgreSQL 数据库和 sqlalchemy 连接的应用程序作为 ORM。我可以使用简化模式(相机和房间)中的两个类,但没有任何关系。因此,例如,如果我选择所有房间,我将无法列出他们的相机。
错误:
sqlalchemy.exc.InvalidRequestError:一个或多个映射器无法初始化 - 无法继续初始化其他映射器。触发映射器:'映射类 Room->room'。最初的例外是:初始化映射器映射类 Room->room 时,表达式“Camera”未能找到名称(“Camera”)。如果这是一个类名,请考虑在定义了两个依赖类之后将此 relationship() 添加到 <class 'models.room.Room'> 类。
# room.py
from sqlalchemy import Integer, Column, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Room(Base):
__tablename__ = 'room'
id_room = Column(Integer, primary_key=True)
cameras = relationship("Camera", back_populates="room")
# camera.py
from sqlalchemy import Integer, Column, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Camera(Base):
__tablename__ = 'camera'
id_camera = Column(Integer, primary_key=True)
id_room = Column(Integer, ForeignKey('room.id_room'))
room = relationship("Room", back_populates="cameras")
解决方案
只需在一个 models.py 文件中定义这两个类 -
# models.py
from sqlalchemy import Integer, Column, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Room(Base):
__tablename__ = 'room'
id_room = Column(Integer, primary_key=True)
cameras = relationship("Camera", back_populates="room")
class Camera(Base):
__tablename__ = 'camera'
id_camera = Column(Integer, primary_key=True)
id_room = Column(Integer, ForeignKey('room.id_room'))
room = relationship("Room", back_populates="cameras")
推荐阅读
- javascript - onkeyup javascript属性在文本框中设置文本
- laravel - 尝试获取非对象的属性时出现错误
- python - Python文字IP得到工作,使用数据kwarg没有
- android - LruCache 不在 kotlin Android 中存储位图
- php - 为什么我在 .htaccess 中收到这个 laravel url 路由错误?
- php - phpunit 功能测试断言数组
- octopus-deploy - 支持 Octopus Deploy 包元数据中的 repository 属性
- c++ - 如果 char 类型变量需要超过 1 个字符,为什么仍然可以编译?
- sql-server - 从sqlserver导出表并导入oracle?
- c# - GPIO 输入 C# UWP 的延长脉冲