返回的 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
更新:这个获得正确打字类型的“技巧”也在 。
在搜索 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
更新:这个获得正确打字类型的“技巧”也在