上下文管理器Cursor的Mariadb Python模块类型提示



我无法辨别正确的类型。我怎样才能弄清楚这应该是什么?

from contextlib import contextmanager
import mariadb

@contextmanager
def mariadb_con(
user: str,
password: str,
host: str,
database: str,
port: int,
commit: bool = False
) -> mariadb.connection.cursor:
con = mariadb.connect(
user=user,
password=password,
host=host,
database=database,
port=port
)
cur = con.cursor()
yield cur
if commit is True:
con.commit()
cur.close()
con.close()

当我尝试使用context_manager时,它会返回:

AttributeError: module 'mariadb' has no attribute 'connection'

玩过之后,我发现了这个:

mariadb._mariadb.connection.cursor
<method 'cursor' of 'mariadb.connection' objects>

这似乎是连接类的游标方法。

这在打印后看起来是正确的,它的类型:

print(type(mariadb._mariadb.connection.cursor))
<class 'method_descriptor'>

然后我将其添加到上下文管理器中。也许有更丰富经验的人可以告诉我这是否是一个误解。

from contextlib import contextmanager
from typing import Generator
import mariadb

@contextmanager
def mariadb_con(
user: str,
password: str,
host: str,
database: str,
port: int,
commit: bool = False
) -> Generator[mariadb._mariadb.connection.cursor, None, None]:
con = mariadb.connect(
user=user,
password=password,
host=host,
database=database,
port=port
)
cur = con.cursor()
yield cur

最新更新