SQLAlchemy查询PostgreSQL表引用引号错误的修复方法
修复SQLAlchemy生成SQL时错误引用数据库+模式的问题
修正连接URL与模型配置的匹配关系
PostgreSQL连接URL已指定目标数据库database1(格式为postgresql://user:password@host:port/database1),无需在模型的__table_args__中重复包含数据库名。若模型中写了schema="database1.schema1",会导致SQLAlchemy将两者视为单一模式名,进而整体添加引号引发错误。正确配置模型的模式参数
模型仅需在__table_args__中指定模式名schema1,示例代码:from sqlalchemy import Column, Integer from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class MS(Base): __tablename__ = 'ms' __table_args__ = {'schema': 'schema1'} id = Column(Integer, primary_key=True) # 其他字段定义检查引擎配置的冗余参数
创建引擎时,URL已明确指向database1,不要在引擎参数中额外添加数据库相关配置,示例引擎创建代码:from sqlalchemy import create_engine engine = create_engine('postgresql://username:password@localhost:5432/database1')跨数据库查询的特殊处理(若有需求)
若需访问其他数据库的表,PostgreSQL需通过dblink或外部表实现,不能直接在模型中写database.schema.table。这种场景下,可通过text()构造原生SQL或映射外部表,避免SQLAlchemy自动拼接错误。验证生成的SQL语句
可打印查询语句确认格式是否正确,示例:from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() query = session.query(MS) print(str(query))正确的SQL应类似
SELECT schema1.ms.id AS schema1_ms_id FROM schema1.ms,而非带整体引号的"database1.schema1".ms。
内容的提问来源于stack exchange,提问作者Moh-Spark
相关产品推荐
相关产品推荐

