获取"无效的加载密钥"在序列化为字符串

时间:2017-12-15 01:24:49

标签: python postgresql sqlalchemy pickle python-3.6

我使用pickle.dumps(obj)在我的PostgreSQL数据库中存储一个序列化对象(我知道这不是一个很好的做法 - 我很着急)。为了检索这个pickle对象,我使用sqlalchemy执行了以下操作:

result = sql_engine.execute("SELECT object FROM schema.table WHERE condition")
pickled_object = result.fetchone()[0] #getting one element from one row
obj = pickle.loads(pickled_object.encode(),
                      encoding="I've tried a bunch of different encodings")

我编写了一个脚本来尝试使用内置于python的每个不同编码的pickle.loads(),但我总是得到同样的错误:_pickle.UnpicklingError: invalid load key, '\x5c'.

\x5c\的ascii(我可以在字符串的开头看到我尝试取消),所以我尝试删除第一个字符(思考)也许它是由于SQL而产生的一些工件),但是我只是在我的字符串的第二个字符中得到了相同的错误(我甚至尝试删除第二个字符,我和第三个字符得到相同的错误)。< / p>

对于那些可能对编码有很多了解的人来说,我的字符串的开头是raw和encoded:

pickled_object[:20] = '\\x800363736f6c617273'
pickled_object.encode()[:20] = b'\\x800363736f6c617273' #duh.

这也许值得注意:

In[170]: chardet.detect(pickled_object.encode())
Out[170]: {'confidence': 1.0, 'encoding': 'ascii', 'language': ''}

我在SO上看到的类似问题与pickle.load()有关,而与pickle.loads()无关。 SQL对我来说是新的,我对编码一无所知 - 所以这可能是一个非常基本的误解。有没有人有任何想法?

0 个答案:

没有答案