{"record":{"id":"98222efeb6d39b36","repo":"cocoindex-io/cocoindex","slug":"pymysql-is-required-for-doris-connector-ddl-operat","errorCode":null,"errorMessage":"pymysql is required for Doris connector DDL operations. Install it with: pip install pymysql","messagePattern":"pymysql is required for Doris connector DDL operations\\. Install it with: pip install pymysql","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"python/cocoindex/connectors/doris/_target.py","lineNumber":109,"sourceCode":"    try:\n        import aiohttp  # type: ignore[import-not-found]\n\n        return aiohttp\n    except ImportError:\n        raise ImportError(\n            \"aiohttp is required for Doris connector. \"\n            \"Install it with: pip install aiohttp\"\n        )\n\n\ndef _get_pymysql() -> Any:\n    \"\"\"Lazily import pymysql (sync MySQL client for DDL).\"\"\"\n    try:\n        import pymysql  # type: ignore[import-not-found]\n\n        return pymysql\n    except ImportError:\n        raise ImportError(\n            \"pymysql is required for Doris connector DDL operations. \"\n            \"Install it with: pip install pymysql\"\n        )\n\n\n# ============================================================\n# JSON encoder for numpy arrays\n# ============================================================\n\n\nclass _NumpyEncoder(json.JSONEncoder):\n    def default(self, obj: Any) -> Any:\n        if hasattr(obj, \"tolist\"):\n            return obj.tolist()\n        return super().default(obj)\n\n\n# ============================================================","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/cocoindex-io/cocoindex/blob/e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b/python/cocoindex/connectors/doris/_target.py#L91-L127","documentation":"Raised by the Doris connector's lazy _get_pymysql helper when pymysql is missing. pymysql is the sync MySQL-protocol client used for Doris DDL (table creation, schema queries), so DDL paths fail with this actionable ImportError.","triggerScenarios":"Executing Doris DDL (_execute_ddl_sync) or metadata queries (_query_sync), and even retry classification (_is_retryable_error), without pymysql installed.","commonSituations":"Fresh environments without the Doris extras; CI installing only core deps; requirements drift after refactors dropping pymysql.","solutions":["Install pymysql: `pip install pymysql`.","Verify `python -c \"import pymysql\"` succeeds.","Include pymysql (or the cocoindex Doris extra) in your dependency file."],"exampleFix":"// before\npip install aiohttp\n// after\npip install aiohttp pymysql","handlingStrategy":"fallback","validationCode":"try:\n    import pymysql  # noqa\nexcept ImportError:\n    raise SystemExit(\"Run: pip install pymysql\")","typeGuard":null,"tryCatchPattern":"try:\n    app.update()\nexcept ImportError as e:\n    if \"pymysql\" in str(e):\n        print(\"pip install pymysql\")","preventionTips":["Install pymysql alongside aiohttp for Doris usage","Add import smoke tests in CI","Pin both drivers in the dependency file"],"tags":["doris","import-error","dependencies","ddl"],"backgroundTag":"missing-optional-dependency","analyzedSha":"e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b","analyzedAt":"2026-09-08T15:59:19.997Z","contentChangedAt":"2026-09-08T15:59:19.997Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}