Python MS-SQL 查询没有为 varbinary datatypa coulmn

问题描述

我可以使用 python 脚本成功连接到 sql 服务器数据库,执行查询并将输出存储在数据框中,但是,数据库中很少有 varbinary(max) 数据类型的列不会返回右侧的列数据框中的格式。任何指向正确方向的指针将不胜感激。

我使用的是 python 3.6

下面的例子(它是代表性的,不是确切的值):

如果我在 sql server 中为 varbinary 列运行查询,它会以以下格式(十六进制)返回值:

0x464D520020323000000000E30000012001400

但是存储在数据帧中的值是以字节为单位的: b'E"\x11\x11\x99\x00UF\n\x80A\x91\x87.\x81\xa1\x80\x08\x10\xc1\xb17\x03#B\xe0\x0f\x1a\x1f\x03\ x80i"\x17\xc3\x91B\x0b.\xc4Ax\x06"\xc4a\x07\x9c\x11\x84\xd1=\x88\x1e\x851\xab\x91\x04EA\x98\x858\r\x x95\x8c\x0b\x05\x91\x97\x8b/\x05\xf1\x17\x83\x07\x86\xb0?\x85,G\x91\x13\x05\x1f\x08\x01Z\x0c'\xc8 \xa0l\x8a\x01H\xe1A\x84\x04\t\xb1\x9b\x82\x1fJ\x81Z\x8a!\x8bQ[\x06\x1aK\xb1\xa9\x07\x06M\xb0G\x86; xb0\x80\t?

以下代表代码

import pyodbc
import pandas as pd

cn=pyodbc.connect() #details of DB not included here
cr=cn.cursor()

query="""select * from tablename""" #repsentative query

DF=pd.read_sql(query,cn)

按照下面的链接,在使用 python 导入时,varbinary(max) 似乎被转换为字节数据类型,在这种情况下,保留从 sql server 导入的原始值的最佳方法是什么?

https://docs.microsoft.com/en-us/sql/machine-learning/python/python-libraries-and-data-types?view=sql-server-ver15

解决方法

我找到了解决方案,在 sql 查询中在 select 查询中执行转换为 varchar(max) 并返回预期的输出。唯一的缺点是指定所有列而不是使用“*”。

select CONVERT(varchar(max),col,1) FROM TableName

感谢那些花时间回复的人,这很有帮助。