我无法辨别正确的类型。我怎样才能弄清楚这应该是什么?
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