首页 > 解决方案 > 无法使用 python 获取 MS SQL Server 路径

问题描述

我正在尝试使用SERVERPROPERTY.

当我在 SSMS 中运行低于 stmt 时,我得到了路径。

SELECT  SERVERPROPERTY('InstanceDefaultLogPath') ,SERVERPROPERTY('InstanceDefaultDataPath')

但是当我尝试使用 pyodbc 从 python 运行相同的查询时。它给了我:

result = connsql.cursor().execute(query).fetchone()
pyodbc.ProgrammingError: ('ODBC SQL type -150 is not yet supported.  column-index=0  type=-150', 'HY106')

知道如何在 python 中获取路径吗?

代码:

 def getSQLServerPath(self):
        try:
            print("Into function..")
            connsql = self.sql_connection()
            query = "SELECT SERVERPROPERTY('InstanceDefaultLogPath') ,SERVERPROPERTY('InstanceDefaultDataPath') "
            result = connsql.cursor().execute(query).fetchone()
            print(result)
            connsql.cursor().commit()
            connsql.close()
            # return path
        except Exception:
            logging.exception("getSQLServerPath function: Something went wrong.")

标签: pythonsql-server

解决方案


错误实际上是在告诉您这里的问题,问题在于返回的数据类型。该表达式SERVERPROPERTY('InstanceDefaultLogPath')返回数据类型sql_variant,除了 SQL Server 几乎没有任何支持。您可以使用以下 SQL 进行检查:

SELECT system_type_name
FROM sys.dm_exec_describe_first_result_set('SELECT SERVERPROPERTY(''InstanceDefaultLogPath'');',NULL, NULL);

因此,您需要CONVERT将值显式指定为 ODBC支持的数据类型。由于这些都是文件路径,nvarchar因此似乎是正确的选择:

SELECT CONVERT(nvarchar(260),SERVERPROPERTY('InstanceDefaultLogPath')) AS InstanceDefaultLogPath,
       CONVERT(nvarchar(260),SERVERPROPERTY('InstanceDefaultDataPath')) AS InstanceDefaultDataPath;

推荐阅读