【发布时间】:2021-05-20 12:58:04
【问题描述】:
我可以使用 python 脚本成功连接到 SQL Server 数据库,执行查询并将输出存储在数据框中,但是,数据库中很少有 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\x88\r\x85A\ 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;\xcd\ 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)
按照下面的链接,看起来 varbinary(max) 在使用 python 导入时被转换为字节数据类型,在这种情况下,保存从 sql server 导入的原始值的最佳方法是什么?
【问题讨论】:
-
仅供参考,3 个反引号 (
`) 足以启动代码围栏;你不需要30个左右。 -
至于问题,这里需要详细说明。 “格式不正确”是什么意思?你得到什么格式,你期望什么格式?
-
你说的是什么格式?
varbinary没有格式,只是一堆字节。varbinary(max)用于可以达到 GB 大小的大型 blob。绝对 NOT 你想加载到数据框中的东西。您发布的代码没有任何解释或说明问题
标签: python sql-server pandas varbinarymax