Python查询SQL Server表数据时如何输出带表头行的结果
问题根因
现有代码没有读取查询结果对应的列名,创建pandas DataFrame时会默认使用数字序号作为列名;同时从输出看当前返回的行数据没有被逐列拆分,本质是创建DataFrame时没有绑定字段元信息。
修复方案
连接SQL Server的游标对象(pymssql、pyodbc等驱动均支持)在执行查询后,可以通过description属性拿到返回结果的字段元信息,提取每个字段的第一个值就是表头列名,创建DataFrame时传入columns参数即可完成表头绑定。
修正后的可运行代码:
db_cursor = conn.cursor() qry = 'select * from ' + tbname db_cursor.execute(qry) # 从游标元数据提取表头列名 col_names = [col_info[0] for col_info in db_cursor.description] table_rows2 = db_cursor.fetchall() # 构建DataFrame时显式指定列名 df2 = pd.DataFrame(table_rows2, columns=col_names) print(df2)
运行后输出会完全匹配预期的带表头格式:
SurveyID SurveyName Sector Category 0 1 Resfo Technology Telecommunication 1 2 ATT Technology Social media 2 3 Airtel Technology Telecommunication
补充提示:直接拼接字符串生成SQL存在注入风险,如果tbname是外部传入的动态值,建议提前做表名合法性校验,确认传入值属于当前数据库的合法表名列表后再执行查询。
内容的提问来源于stack exchange,提问作者Simply Jeff
相关产品推荐
相关产品推荐

