Итак, у вас есть бинарный файл, содержащий маринованный объект.Шестнадцатеричный дамп файла выглядит так:
00000000: 8004 9515 0000 0000 0000 007d 9428 8c03 ...........}.(..
00000010: 666f 6f94 4b01 8c03 6261 7294 4b02 752e foo.K...bar.K.u.
Вы можете сохранить объект в двоичном столбце, затем прочитать его и распаковать через pickle.loads
следующим образом:
import pyodbc
import pickle
conn_str = (
r'DRIVER=ODBC Driver 17 for SQL Server;'
r'SERVER=.\SQLEXPRESS;'
r'DATABASE=myDb;'
r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("CREATE TABLE #test (id INT PRIMARY KEY, pkl VARBINARY(max))")
# read pre-pickled object from file and save to table
with open(r'C:\Users\Gord\Desktop\data.pickle', 'rb') as f:
sql = "INSERT INTO #test (id, pkl) VALUES (?, ?)"
params = (1, f.read())
crsr.execute(sql, params)
# read it back from database and unpickle it
pickled_data = crsr.execute("SELECT pkl FROM #test WHERE id=1").fetchval()
unpickled_object = pickle.loads(pickled_data)
print(unpickled_object)
# {'foo': 1, 'bar': 2}