无法使用python获取MS SQL Server路径

2024-10-02 10:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用SERVERPROPERTY获取sql server数据和日志路径

当我在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.")

Tags: 路径executesqltyperesultqueryselectcursor
1条回答
网友
1楼 · 发布于 2024-10-02 10:23:33

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

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

因此,您需要显式地CONVERTODBC支持的数据类型的值。由于这两个都是文件路径,因此nvarchar似乎是正确的选择:

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

相关问题 更多 >

    热门问题