Skip to content

cursor.fetchall, fetchmany and fetchone fail to type-check under ty #620

@sam-leonard-ct

Description

@sam-leonard-ct

Describe the bug

cursor.fetchall, cursor.fetchmany and cursor.fetchone both fail to type-check under ty

To reproduce

# setup a connection
cursor.execute("SELECT 1")
cursor.fetchone()
# or any of the below:
cursor.fetchmany()
cursor.fetchall()

The above snippet when checked with ty check repro.py gives the following:

error[missing-argument]: No argument provided for required parameter `self` of function `fetchone`
   --> repro.py:103:1
    |
102 | cursor.execute("SELECT 1")
103 | cursor.fetchone()
    | ^^^^^^^^^^^^^^^^^
    |
info: Union variant `def fetchone(self) -> None | Row` is incompatible with this call site
info: Attempted to call union type `Unknown | (bound method Cursor.fetchone() -> None | Row) | (def fetchone(self) -> None | Row)`
info: rule `missing-argument` is enabled by default

It seems ty thinks this is a union of either a bound method or static method?

I believe this could also be an issue in ty as well but thought I'd ask here first.

Expected behavior

The methods should type check correctly.

Further technical details

Python version: 3.12.11
SQL Server version: SQL Server 2017
Operating system: MacOs 26.5
ty version: Observed on both 0.29 and 0.40

I have just been getting around this with # ty: ignore[missing-argument] but I'd rather not silence the lint.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinginADOtriage doneIssues that are triaged by dev team and are in investigation.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions