返回的 sqlalchemy 对象 "cursor" 和 "cursor.fetchall()" 记录的正确类型提示是什么?

What is the right type hint for the returned sqlalchemy objects "cursor" and "cursor.fetchall()" records?

在搜索 sqlalchemy 查询的 sqlalchemy 游标的正确类型提示时,这里是一个示例函数:

import sqlalchemy
from typing import Tuple, tuple

def get_cursor_and_records(
    connection, query) -> Tuple[sqlalchemy.engine.cursor?, tuple]:
    """Make a database cursor for the query and fetch the query output
    :param connection: mysqldb connection to db
    :param query: mysql query string
    returns:
     cursor: row-wise data fetch from the db connection's query
     records: List(Tuple([column types...])) output from cursor.fetchall()
    """
    cursor = connection.cursor()
    cursor.execute(query)
    records = cursor.fetchall()
    return cursor, records

游标是用 sqlalchemy 构建的(分许多步骤,而不是像这里只一步):

sqlalchemy.create_engine(
    sqlalchemy.engine.URL.create(**settings), 
    encoding="utf8"
    ).raw_connection().cursor()

当时的记录是:

cursor.fetchall()`

看来,使用tuple似乎是正确的(作为可供选择的三个对象之一)。 例如,This 表明 -> List[Tuple[int, str, str]] 是正确的。然而,我将此函数用于许多更改列号和类型的查询。因此,我使用 tuple,但不是很确定。

sqlalchemy 游标的正确类型提示是什么?如果错误,sqlalchemy 记录的正确类型提示是什么?

试试这个 return 记录元组:

cursor = connection.cursor()
records = (cursor.execute(query)).all()
return records

通过打印类型解决:

logger.log_text(str(type(cursor)))
logger.log_text(str(type(records)))

输出:

<class 'MySQLdb.cursors.Cursor'>
<class 'tuple'>

因此,这里使用的不是sqlalchemy游标,而是MySQLdb游标类型。 并且: built-in tuple 是必需的,我误以为它是 sqlalchemy.

中的 tuple 类型
import sqlalchemy
from MySQLdb.cursors import Cursor
from typing import Tuple

def get_cursor_and_records(
    connection, query) -> Tuple[Cursor, tuple]:
    """Make a database cursor for the query and fetch the query output
    :param connection: mysqldb connection to db
    :param query: mysql query string
    returns:
     cursor: row-wise data fetch from the db connection's query
     records: List(Tuple([column types...])) output from cursor.fetchall()
    """
    cursor = connection.cursor()
    cursor.execute(query)
    records = cursor.fetchall()
    return cursor, records

更新:这个获得正确打字类型的“技巧”也在