Pymongo Bson Binary Save And Retrieve?
Solution 1:
Let's go through the errors:
The first error appears simply because you need an actual BSON object. Note, that you have never encoded any data - creating
bson.binary.Binary
object does not mean invokingBSON.encode()
.And that is where PyMongo cheats you a bit. The
bson.binary.Binary
is a runtime-patchedstr
orbytes
instance (see source). That is why you get the second error: what you call is actuallystr.decode()
, notBSON.decode()
. So,gotfield
contains the random float data you've stored initially, but the object itself has some different methods (e.g.repr()
) bound to it.
Solution 2:
I'm coming~ I just find a way. Hope this may help you somehow.
from cStringIO importStringIO
fromPILimportImage
save image:
content = StringIO(f.read())
c = dict(
content=bson.binary.Binary(content.getvalue()),
)
# insert dict into my database, sha1 is primary key
image_data[sha1] = c
retrieve image:
f = image_data[sha1]
image = Image.open(StringIO(f['content']))
----EDIT----
If you want to return an image from web servers.Do like this:
f = image_data[sha1]
# f['mime'] is the type of image, for example 'png'.
resp = Response(f['content'], mimetype='image/' + f['mime'])
return resp
Solution 3:
Use array.fromstring
for the final decoding stage. I can get to the same spot you're at like so:
>>>from bson import Binary>>>import array>>>gotstring = Binary('\xb7\xc2?@\xd7\x1d\x81B5\x83\x01B\x13\x1f\xa4B', 5)
And finally:
>>>a = array.array('f')>>>a.fromstring(gotstring)>>>a
array('f', [2.9962594509124756, 64.55828094482422, 32.37813186645508, 82.0606918334961])
Solution 4:
You need to encode the array before storing it, and should not use the array.tostring. Please have a look at the documentation here.
from bson import BSON
bson_string = BSON.encode({"hello": "world"})
>>> bson_string
'\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00'>>> bson_string.decode()
{u'hello': u'world'}
Solution 5:
BSON.decode(gotfield)
it has a TypeError problem,and you should write it like that below
BSON.decode(bson.BSON(gotfield))
Post a Comment for "Pymongo Bson Binary Save And Retrieve?"