SQLAlchemy报relation "Cities"不存在 多对多关联建表错误问询
错误原因
你代码的核心问题出在db_init.py的Base实例声明逻辑:
models.py中你定义了一个base = declarative_base()实例,所有的模型类(Cities、Sensors)、多对多中间表都绑定在这个base的元数据里- 但
db_init.py中你又重新实例化了一个全新的base = declarative_base(),这个新的base完全没有关联你定义的任何数据表模型,执行base.metadata.create_all(db)的时候根本不会创建你需要的Cities、Sensors、cities_sensors三张表,所以操作时会提示relation "Cities" does not exist
另外还有一个次要问题:你的PostgreSQL连接串没有指定目标数据库名称,可能会默认连接到系统的postgres库,不符合业务使用规范。
你原有多对多关联的配置本身没有问题,不需要调整。
修复方案
按以下步骤修改db_init.py即可:
- 删掉
db_init.py中重复的Base导入和实例化代码,改为从models.py导入已经绑定了模型的base实例 - 补全数据库连接串中端口后的目标数据库名称(需要你提前在PostgreSQL中创建好对应数据库)
修改后的db_init.py参考代码:
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from models import Cities, Sensors, base # 导入models里绑定了模型的base # 末尾补充你实际使用的数据库名,示例为city_sensor db_string = "postgresql://postgres:1234@localhost:5438/city_sensor" db = create_engine(db_string) Session = sessionmaker(db) session = Session() base.metadata.create_all(db) # 此时会正常创建所有关联的表 # 后续插入数据的代码不需要改动 czestochowa_city = Cities(name="Czestochowa") myszkow_city = Cities(name="Myszkow") krzepice_city = Cities(name="Krzepice") temperature_sensor = Sensors(name="temperature", unit="Celsius") humidity_sensor = Sensors(name="humidity", unit="precentage") pollution_sensor = Sensors(name="pollution", unit="PM2.5") session.add(czestochowa_city) session.add(myszkow_city) session.add(krzepice_city) session.add(temperature_sensor) session.add(humidity_sensor) session.add(pollution_sensor) session.commit()
内容的提问来源于stack exchange,提问作者Ignac96
相关产品推荐
相关产品推荐

