Python - pandas 将 MS SQL 日期转换为 nvarchar

Python - pandas converts MS SQL date to nvarchar

我的 python 代码在示例 MS SQL 服务器查询上运行 read_sql... 方法。

其中一列 - system_type_name - 指示类型 date 而在 SSMS 中为 运行。

使用以下代码执行的查询给我 nvarchar(10) 类型:

Config.json:

{"Drive": "SQL Server",
 "Server": "server_name",
 "Database":......
 "UID":........
 "PWD":......}

代码:

import pandas as pd
import pyodbc

query = '''
    DECLARE @dt
    DECLARE @sql nvarchar(max) = N'procedure_name 0, ''1900-01-01'', @dt';
    SELECT system_type_name FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0) '''


cnxn = connect_to_db("config.json", False)
src = pd.read_sql(query, cnxn)
print(src)

df 结果:

                  num_legs
system_type_name  nvarchar(10)

bug/issue pandas 是 date 类型的某种转换吗?

古老的“SQL 服务器”驱动程序 return 是多个 T-SQL 类型的字符串表示形式。较新的 ODBC 驱动程序 return 更具体的类型。例如:

# with DRIVER=SQL Server
#
print(type(crsr.execute("SELECT CAST('2022-01-17' AS DATE) AS d").fetchval()))
# <class 'str'>

# with DRIVER=ODBC Driver 17 for SQL Server
#
print(type(crsr.execute("SELECT CAST('2022-01-17' AS DATE) AS d").fetchval()))
# <class 'datetime.date'>