Проблема такая: есть база данных в MS ACCESS, в ней есть таблица с МЕМO полем (png файл).
Была задача записать это мемо поле в файл.
#!/Python26/python
# -*- coding: utf-8 -*
import pyodbc
dbpath = 'Q:\\temp\\map\\data.mdb'
sql = 'SELECT img from map_data'
conn = pyodbc.connect('DSN=Yooo')
cursor = conn.cursor()
cursor.execute(sql)
row = cursor.fetchone()
file = open('Q:\\temp\\map\\a.png', 'wb')
print row
file.write(row.img)
file.close
Q:\temp\map>access.py
(u'\u5089\u474e\u0a0d\u0a1a\x00\u0d00\u4849\u5244\x00\u6400\x00\u6400\u0608\x00\u7000\u95e2T\u5700\u49c3\u4144\u7854\u74
9c\ubf90\u432f\u1461\u9f86\udd73\ua6f6\ua189\u4269\u9224\u889a\u9ad8\u4898\u1a8c\ub031\u1260\uc19b\u603f\u0e91\u8906\uff
9d\uc580\u6928\u1307\u4656\u3126\uab60\uf8a8\u41d1\ubf7b\u35ef\uf77c\ue4ea\ude59\ue19c\uef3d\uaf39\u9215\uf5d8\u297b\u62
85\ud6cc\u2ac1\u8d27\u3673\u57f7\u4210\u0212\u3090\ud985\u0203\uc75a\u7c57\u75be\u9f19\u651a\uad7e\u4486\ue646\u7dc9\uc8
66\u9220\u0181\u1051\u1333\u6644\u4580\ud1fc\uba3c\uf5e6\u1de5\ue180\u8972\u4fde\uc6ca\u1d5e\u7c11\u3df9\u6048\u5036\ue1
e0\u99e6\ue6db\u693d\u91df\u8a94\uead4\u4cd3\u4ece\u4de0\u4921\ub4e2\uc2d1\ucf3b\ub548\uf2c2\u42ce\u2d9e\u6703\uf8b2\uf0
ec\uf582\u45dd\ube7c\uc21b\u26ef\u94bc\uaf7a\ubbf8\ua5d3\ud4fd\ua3e1\uc5fd\ue5dd\u0463\ubdb0\u6554\ua66e\u58c2\uc939\u08
5a\uc178\uf190\uce2f\ud06b\ue098\x17\uff00\u54ff\u3d92\u044a\u1041\ubf85\u6eea\u0303\u4163\u1314\u7303\uf58d\ue606\u9e0b
------ кусь кусь ------
\uffff\u4262\ue0a4\uffcf\u1918\u2320\u41ba\u94d0\u91e6\ucd61\uc2c0\uccc6\u5010\u3d08\u3d73\u9ad5\u4041\u179c\u8132\u0ff4
\u5c76\udc28\u064e\u4606\u9446\ub7f5\udbe8\ufe14\uf9fd\ud687\u878b\ue24e\u2b40\u8dce\ufb7d\u6d21\u067d\u82c4\u4469\u0e39
\ua801\u6613\u0ccc\u4e77\u823f\u7eef\u6065\ucff8\u5110\u0eed\u4f77\uad78\u723b\u17f3\u8b9a\ud311\u5191\u7e0d\uaf0c\ube1e
\u1a45\u84b8\ufa6c\u6661\u8460\u9875\ucd20\u4659\u0c24\ud975\u067f\u9446\u3ea3\u1818\u1919\u1aa2\u21bd\u2f0b\ua360\u8c2a
\u0c0c\ufeff\u87fe\u4d0e\u1240\u0b21\u331b\u79cc\uded0\uffc2\u7fff\u3521\ue33a\ubfff\u99ff\x00\x00\uffff\x03\u1fca\u5d64
\uc4c2\ub348\x00\x00\u4549\u444e\u42ae\u8260', )
Traceback (most recent call last):
File "Q:\temp\map\access.py", line 16, in <module>
file.write(row.img)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Upd: Немного переписал код для ясности.
Upd: Наверное немного неясно описал проблему… попробую ещё раз :)
Дан готовый файл базы данных MS Access, в нём есть таблица map_data, а в ней интересующая нас колонка img типа МЕМО, в которую сторонними средствами было записано изображение побайтово…
Так вот, при доступе к этому полю посредством pyodbc, у нас получается юникодовская строка, которую я не могу записать в файл (скорее всего из-за отсутствия опыта :) )
Есть ли возможность записать 1 к 1 информацию из поля базы данный в файл? или как-то сказать питону, что данные у нас типа binary, а не строка?