Когда я запускаю 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)
Код: Выделить всё
[[tool.mypy.overrides]]
module = "psycopg.*"
ignore_missing_imports = true
Код: Выделить всё
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
- версия: 3.2.4
Код: Выделить всё
psycopg2 - версия: 1.1.1
Код: Выделить всё
mypy - версия: 2.9.21.20241019
Код: Выделить всё
types-psycopg2 - : ~2,0
Код: Выделить всё
sqlalchemy - : ~3.1
Код: Выделить всё
psycopg[binary]
Я попробовал несколько шагов по устранению неполадок, но постоянно получаю ту же ошибку, связанную с psycopg2 и его заглушками типа. Кто-нибудь знает, как решить эту проблему или требуется ли определенная конфигурация, чтобы заглушки типа psycopg2 работали с mypy в среде Dockerized?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -container
Мобильная версия