Python连接MSSQL查询数据库名时如何去除结果外层的方括号
解决方案
首先你的代码存在一处显式笔误:创建游标时调用的sce.cursor()中sce是未定义变量,需要替换为你前面创建的连接实例db_connection,否则代码会直接抛出NameError。
返回结果中数据库名被方括号包裹,是当前ODBC连接上下文默认开启了标识符引用包装导致的,sys.databases视图的name字段本身存储的是无括号的原始库名,你可以任选以下一种方法修复:
方法1:SQL层直接返回清洗后的结果(推荐)
建议连接时显式指定连接到master系统库(避免空database参数触发异常配置),同时在查询语句中直接处理掉方括号,从数据源层面拿到干净的结果:
import pyodbc import pandas as pd db_connection = pyodbc.connect( Driver='{ODBC Driver 17 for SQL Server}', database='master', server='servername', Trusted_Connection='yes' ) db_cursor = db_connection.cursor() db_cursor.execute("SELECT REPLACE(REPLACE(name, '[', ''), ']', '') AS db_name FROM sys.databases") table_rows = db_cursor.fetchall() # 生成DataFrame时直接指定列名,避免默认数字列名 df = pd.DataFrame(table_rows, columns=['database_name']) print(df)
方法2:Python层对结果做字符串处理
如果不想修改SQL逻辑,可以在拿到查询结果后,对DataFrame对应列做字符串截取,去掉首尾的方括号:
# 原有查询逻辑不变,拿到table_rows后做如下处理 df = pd.DataFrame(table_rows) # 去掉第一列值首尾的方括号 df[0] = df[0].str.strip('[]') # 可选:重命名列方便后续使用 df = df.rename(columns={0: 'database_name'}) print(df)
两种方法最终都会输出不带方括号的数据库列表:
database_name 0 master 1 tempdb 2 model 3 msdb 4 StudiesDB 5 Studies 6 study 7 Test
内容的提问来源于stack exchange,提问作者Simply Jeff
相关产品推荐
相关产品推荐

