Skip to main content

QuestDB on SuperSet

แก้ปัญหา QuestDB บน SuperSET

QuestDB Error

questdb error: QuestDbEngineSpec.execute() takes 3 positional arguments but 4 were given

This may be triggered by: 

Issue 1002 - The database returned an unexpected error."

สาเหตุของปัญหาคือ questdb-connect มีการเรียกใช้เมธอด execute() ในลักษณะที่ทำให้ SQLAlchemy ตีความว่ามีการส่งพารามิเตอร์เกินมาหนึ่งตัว นี่เป็นปัญหาที่เกิดขึ้นบ่อยในไลบรารีที่ไม่ได้เป็นทางการ (official) และอาจยังไม่ได้มีการแก้ไขในเวอร์ชัน 1.1.4


แนวทางแก้ไขโค้ดของ questdb-connect โดยตรง
  • ค้นหาไฟล์ที่เกี่ยวข้อง: หาไฟล์ questdb.py ในไดเรกทอรีการติดตั้ง Python ของคุณ โดยทั่วไปจะอยู่ที่: /path/to/python/lib/pythonX.Y/site-packages/questdb/sqlalchemy/base.py (ขึ้นอยู่กับระบบปฏิบัติการและวิธีติดตั้ง Python ของคุณ)

  • แก้ไขเมธอด execute(): ค้นหาเมธอด execute() ในไฟล์ base.py ที่อยู่ในคลาส QuestDBDialect_base หรือ QuestDBEngineSpec


การแก้ไขโค้ดที่เกิดขึ้นจริงบนเครื่อง ActiveDog

พบไฟล์ที่ /opt/svlt/svlbis4/venv/lib/python3.10/site-packages/qdb_superset/db_engine_specs/questdb.py

แก้ไขใน method "execute()"

ของเดิมคือ

def execute(  # pylint: disable=unused-argument
    cls,
    cursor: Any,
    query: str,
    **kwargs: Any,
) -> None:

แก้ไขเป็น

def execute(  # pylint: disable=unused-argument
    cls,
    cursor: Any,
    query: str,
    parameters: Optional[Dict[str, Any]] = None, # เพิ่มบรรทัดนี้
    **kwargs: Any,
) -> None:

หรือสามารถแก้อีกแบบเป็น

def execute(  # pylint: disable=unused-argument
    cls,
    cursor: Any,
    query: str,
    parameters: Any = None, # หรือใช้แค่ Any ก็ได้
    **kwargs: Any,
) -> None: