Problem with psycopg2, bytea, and memoryview
Frank Millman
frank at chagford.com
Wed Jul 31 07:43:05 EDT 2013
"Antoine Pitrou" <solipsis at pitrou.net> wrote in message
news:loom.20130731T114936-455 at post.gmane.org...
> Frank Millman <frank <at> chagford.com> writes:
>>
>> I have some binary data (a gzipped xml object) that I want to store in a
>> database. For PostgreSQL I use a column with datatype 'bytea', which is
>> their recommended way of storing binary strings.
>>
>> I use psycopg2 to access the database. It returns binary data in the form
>> of
>> a python 'memoryview'.
>>
> [...]
>>
>> Using MS SQL Server and pyodbc, it returns a byte string, not a
>> memoryview,
>> and it does compare equal with the original.
>>
>> I can hack my program to use tobytes(), but it would add complication,
>> and
>> it would be database-specific. I would prefer a cleaner solution.
>
> Just cast the result to bytes (`bytes(row[1])`). It will work both with
> bytes
> and memoryview objcts.
>
> Regards
>
> Antoine.
>
Thanks for that, Antoine. It is an improvement over tobytes(), but i am
afraid it is still not ideal for my purposes.
At present, I loop over a range of columns, comparing 'before' and 'after'
values, without worrying about their types. Strings are returned as str,
integers are returned as int, etc. Now I will have to check the type of each
column before deciding whether to cast to 'bytes'.
Can anyone explain *why* the results do not compare equal? If I understood
the problem, I might be able to find a workaround.
Frank
More information about the Python-list
mailing list