SQL Server VARBINARY字段PDF二进制数据转存OPENROWSET BLOB异常问题
问题:SQL Server VARBINARY(MAX)中PDF数据通过OPENROWSET BLOB转移异常
我在将SQL Server VARBINARY(MAX)字段存储的PDF二进制数据通过OPENROWSET BLOB方法转移至客户数据库时遇到异常,具体情况如下:
- 读取PDF二进制数据的Python代码:
with open(file_path, 'rb') as file: binary_data = file.read()
- 将二进制数据转换为十六进制字符串并存储到VARBINARY(MAX)字段的代码:
if isinstance(binary_data, tuple): binary_data = b''.join(binary_data) binary_data = "0x" + binary_data.hex() binary_data = bytes(binary_data, encoding='utf-8')
- 异常现象:
- 直接复制VARBINARY字段内容到在线转换器可成功还原PDF;
- 客户使用OPENROWSET BLOB方法转移后,数据库中存储的数据十六进制长度远大于原数据,在线转换器无法还原PDF;
- 尝试将二进制数据编码为base64传输,客户应用仍无法读取文件,base64编码代码:
with open(file_path, 'rb') as f: binary_data = base64.b64encode(f.read())
- 我的SQLAlchemy代码实现:
SQL_USERNAME = os.getenv("MSSQL_USERNAME") SQL_USERPWD = os.getenv("MSSQL_PASSWORD") SQL_PORT = os.getenv("MSSQL_PORT") SQL_HOST = os.getenv('MSSQL_HOST') SQL_DATABASE = os.getenv('MSSQL_DATABASE') conn_string = f"mssql+pyodbc://{SQL_USERNAME}:{SQL_USERPWD}@{SQL_HOST}:{SQL_PORT}/{SQL_DATABASE}?driver=ODBC+Driver+17+for+SQL+Server" engine = create_engine(conn_string) metadata = MetaData() orders_table = Table('ATTACHMENTS_TABLE', metadata, Column('id', UUID(as_uuid=True), primary_key=True, default = uuid4), Column('attachment', VARBINARY(max)) ) insert = orders_table.insert().values( attachment = data_model.attachment_to_hex() ) with engine.connect() as conn, conn.begin(): conn.execute(insert)
- 包含
attachment_to_hex()方法的DataModel代码:
from pydantic import BaseModel from typing import Optional class OrderModel(BaseModel): attachment: Optional[bytes] def attachment_to_hex(self): try: if isinstance(self.attachment, tuple): self.attachment = b''.join(self.attachment) attachment_hex = "0x" + self.attachment.hex() attachment_bytes = bytes(attachment_hex, encoding='utf-8') print(attachment_bytes) return attachment_bytes except Exception as e: print(f"Error converting to hex value: {e}")
请问有没有人在使用SQL Server或C#时遇到过类似问题?能否分享OPENROWSET或FileStream在数据库中编码文件的相关见解?恳请提供帮助和指导。
内容的提问来源于stack exchange,提问作者Ignac96
相关产品推荐
相关产品推荐

