You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中Mypy检测Psycopg代码报错的解决方法咨询

Docker容器中Mypy检测Psycopg代码报错的解决方法咨询

大家好,我在Docker容器里的Python项目中用mypy做代码类型检查,用到了psycopg和SQLAlchemy这两个库,但最近碰到了和psycopg相关的类型检查问题,折腾了好几个方案都没解决,想请教下大家怎么处理。

当我执行命令mypy src/datasets/database.py时,出现了和psycopg相关的错误:

/usr/local/lib/python3.10/site-packages/psycopg/_cmodule.py:1: error: disable_error_code: Invalid error code(s): import-not-found  [misc]
Found 1 error in 1 file (checked 1 source file)

我的mypy配置是在pyproject.toml里这样设置的:

[[tool.mypy.overrides]]
module = "psycopg.*"
ignore_missing_imports = true

项目中的database.py代码如下:

from typing import Any, Dict

import pandas as pd
import sqlalchemy.orm.decl_api
from kedro.extras.datasets.pandas.sql_dataset import SQLTableDataSet
from kedro.utils import load_obj
from sqlalchemy.dialects.postgresql import insert as pg_insert

class SQLTableORMDataset(SQLTableDataSet):
    def __init__(
        self,
        orm_model: str,
        credentials: Dict[str, Any],
        load_args: Dict[str, Any] = None,
        save_args: Dict[str, Any] = None,
    ) -> None:
        self.orm_model: sqlalchemy.orm.decl_api.DeclarativeBase = load_obj(orm_model)

        super().__init__(table_name=self.table_name, credentials=credentials, load_args=load_args, save_args=save_args)

    @property
    def table_name(self):
        return self.orm_model.__table__.name

    @property
    def table_schema(self):
        return self.orm_model.__table__.schema

    def delete_rows(self):
        engine = self.engines[self._connection_str]
        with engine.begin() as conn:
            statement = sqlalchemy.delete(self.orm_model).where(sqlalchemy.text("true"))
            conn.execute(statement)

    def upsert_data(self, data: pd.DataFrame):
        engine = self.engines[self._connection_str]
        with engine.begin() as conn:
            for row in data.to_dict(orient="records"):
                stmt = pg_insert(self.orm_model).values(**row)  # type: ignore

                on_conflict_stmt = stmt.on_conflict_do_update(
                    index_elements=["foo"],
                    set_=row,
                )
                conn.execute(on_conflict_stmt)

环境信息

  • Python版本:3.10
  • psycopg2版本:3.2.4
  • mypy版本:1.1.1
  • types-psycopg2版本:2.9.21.20241019
  • sqlalchemy:~2.0
  • psycopg[binary]:~3.1

我的问题

我已经尝试了好几种排查方法,但还是一直遇到和psycopg2及其类型存根相关的错误。有没有人知道怎么解决这个问题?或者在Docker环境里,是不是需要特定的配置才能让psycopg2的类型存根和mypy正常配合使用?

备注:内容来源于stack exchange,提问作者txg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:39:30