python - 无法使用 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.")
解决方案
错误实际上是在告诉您这里的问题,问题在于返回的数据类型。该表达式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;
推荐阅读
- git - git clone 总是失败并显示“发送 HTTP 请求失败”
- python - 循环遍历 XML 节点并在 Python 中比较其元素的文本
- pine-script - 如何在 Tradingview 图表中绘制 DOM [市场深度]
- python - 如何解决模型 django 上的这个问题?
- angular - 使用反应驱动形式的错误验证 Angular 11
- python - 两个列表的 Python 比较
- tex - wxMaxima: "*" 参数个数错误
- r - 将字符串拆分为组件
- javascript - 我想用相同的按键操作重复应用、取消、应用和取消事件
- javascript - 当有多个可用时,打字稿使用不正确的类型和玩笑