postgres 导出bytea数据出错

zhenzhu6485 2017-09-11 09:03:45
这样的,做了个实验将图片存入postgres,但是发现导出数据的时候居然是内存地址。。。试了其他integer,character都是正常的。下面代码:

存入的代码,忘了说环境是python,windows


if __name__ == "__main__":
conn = psycopg2.connect(database="测试", 此处省略)
cur = conn.cursor()
query_sql = "select binarydump from bindump limit 1"
img_buffer = None
with open("代码文件/b1.jpg",'rb') as reader:
img_buffer = reader.read()
insert_sql = "update student2 set 图片=(%s) where id=1"
params = (psycopg2.Binary(img_buffer),)
cur.execute(insert_sql, params)
conn.commit()


导出的代码

conn = psycopg2.connect(database="测试", 此处省略)
cur = conn.cursor()
cur.execute("select pic from student2 where id=1")
blob = cur.fetchone()
print(blob)
open('代码文件/post.jpg','wb').write(blob)
cur.close()


结果:
<memory at 0x000000BC50AC0108>,)
Traceback (most recent call last):
File “notebooks\测试.py", line 79, in <module>
open('代码文件/post.jpg','wb').write(blob)
TypeError: a bytes-like object is required, not 'tuple'

奇了怪了。。

导入后的bytea数据是这种
\377\330\377\340\000\020JFIF\000\001\001\000\000\001\000\001\000\000\377\333\000C\000\010\006\006\007\006\005\010\007\007\007\011\011\010\012\014\024\015\014\013\013\014\031\022\023\017\024\035\032\037\036\035\032\034\034 $.' ",#\034\034(7),01444\037'9=82<.342\377\300\000\013\010\000o\001\032\001\001\021\000\377\304\000\037\000\000\001\005\001\001\001\001\001\001\000\000\000\000\000\000\000\000\001\002\003\004\005\006\007\010\011\012\013\377\304\000\265\020\000\002\001\003\003\002\004\003\005\005\004\004\000\000\001}\001\002\003\000\004\021\005\022!1A\006\023Qa\007"q\0242\201\221\241\010#B\261\301\025R\321\360$3br\202\011\012\026\027\030\031\032%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\203\204\205\206\207\210\211\212\222\223\224\225\226\227\230\231\232\242\243\244\245\246\247\250\251\252\262\263\264\265\266\267\270\271\272\302\303\304\305\306\307\310\311\312\322\323\324\325\326\327\330\331\332\341\342\343\344\345\346\347\350\351\352\361\362\363\364\365\366\367\370\371\372\377\332\000\010\001\001\000\000?\000\367\372(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\212(\242\271\377\000\030\370\272\317\301:\037\366\275\375\235\365\315\250\225b\177\261\304\034\307\2738f\313\000\027 \014\347\253(\357\\\034\037\264W\203f\270\212'\264\326`Gp\255,\226\361\225@O\336;d'\003\257\000\237@k\327(\254\277\021\353\366>\026\360\375\346\265\2514\202\322\325\003?\226\273\231\211!U@\365,@\347\003\236H\034\327\231\377\000\303Gx?\376\201\272\347\375\370\207\377\000\216\327\260QE\024QE\024QE\025\301\370\317\342\347\206|\021\252&\231~n\356\257\012o\222+$W0\203\215\273\3672\200H9\003\223\216N\001\031\347\340\375\242\274\0335\304Q=\246\263\002;\205id\267\214\252\002~\361\333!8\035x\004\372\003^\261\004\360\335[\305qo,sA*\007\216H\3302\272\221\220A\034\020G9\251(\242\212(\242\212(\242\212(\242\253\337XY\352vrY\337\332Awk&7\303<bDl\020FT\360p@?\205|i\343\357\000\352_\017\365\230\354\257e\216\342\013\204i-\256bF\012\352\030\214\034\214\007\003\004\250'\033\207'5\355\177\003\376%\377\000m\331\247\205\365\233\231\346\325\342\363e\202\346y7\031\343\310m\245\231\3134\203s\360\0066'\261\257h\256\017\343<\023\\\374$\327\222\010\244\225\302D\345QK\020\25323\036;\005\004\223\330\002k\343\312\373\336\300\333\266\235ll\347\363\355LHa\233\3162\371\211\201\265\267\222K\344`\356$\347\256MX\242\212\343\365\237\212~\011\3205\027\260\324u\370\022\3512\035!\216I\266\020H*\3065`\254\0109S\310\364\2514\337\211\336\010\325m\332{\177\023\351\250\212\345\010\272\230[\266p\017\013&\322G=q\216\276\206\272\312(\242\212+\345O\332\012\011\241\370\232^X\255\021&\262\211\342h\024\207u\313.e\365}\312\303#\370B\016\325\303\237\011j\377\000\360\207'\212R\030\345\322\315\303[\310\361H\035\240a\214\031\024r\200\226\300\317\266q\271w{?\300\317\211\360\375\236\037\010k\267r\011\303\355\323n&`T\256\000\020g\250 \347nI\316v\214aA\367\312(\242\212(\242\212(\242\212(\242\260\374]\341{\037\030\370j\357G\277\2162%Ba\225\223q\202\\\035\262/ \344\023\323## \360M|\211\343\037\012j\237\016\274[\366\011n\177}\026\333\233;\270\033at\334vH0r\214\012\236;\021\301#\004\375\037\360\263\342\225\237\216l\343\323.\026x\365\333[E\222\344\272\015\223\340\205i\024\257\003$\251*@\306\374\014\200Mw\232\265\202\352\2725\366\234\3422\227v\362@\336b\261\\2\225\344+)#\236\314\017\241\035k\341\011\341kk\211`s\031x\334\243\030\344WRA\307\014\244\206\036\340\220{W\331\377\000\014\265\271\274C\360\337C\324n<\317=\255\374\251\032I\014\215#F\3062\345\217$\261M\337\217S\326\272\312+\227\370\215\177y\246|:\327\257,.\340\264\272\216\321\266M4\2060\271\340\355a\310\220\202B\177\266V\276,\202\011\256\256"\267\267\212I\247\225\302G\034jY\235\211\300\000\016I'\214W\250M\373>\370\336-,]\240\323f\234\242\267\330\222\344\211A8\312\345\224&Fy\371\261\301\301<d\360\017\305\375k\300\227\022h\372\354\027w\372|n\261\033y\234\211\354\212\220\244&\356\301A\036Y\300\310\030+\316~\227\360\346\277c\342\237\017\331\353ZkHm.\220\262y\213\265\224\202U\224\217P\300\21628\340\221\315jQE\025\363\307\355#\240\355\324t\237\020\375\266\017\336E\366\037\2621\304\207iw\363\027\373\313\363\340\364\301+\327w\007\354\351\254%\317\366\367\205/\023\317\265\236/\265\244/\022\264dq\034\241\263\311\334\032!\203\221\205=;\362\377\000\024>\031\336|;\324a\3274\253\277\370\226Mv~\314\3611\216K92\316\211\222\305\216\025xps\2259\307\031\365\177\204\377\000\027\223\306>N\205\253\247\227\256\244L\336p\332\261\335\005\307 g"B\011%@\306\025\210\300\371G\254QE\024QE\024QE\024QE\025\347\377\000\024\276\032\333\370\367GY-R\010u\333}\242\332\352F(\2457|\311!\012I\\\026#\216\033\241\000\266~X\3215\215S\301\236(\203R\265O#R\323\345`b\270\213\241\301WGS\310\310,\247\241\031\340\203\315}\227\341/\025\351\2763\360\374Z\316\226d\020;\2624r\355\363#e8\303\205$\003\2140\031\350\300\367\257\211/\354\337O\324nl\2459\222\336W\211\216\306L\225$\037\225\300a\323\243\000Gp\015}w\360bf\237\341&\202\356#\004$\251\362F\2500\263:\216\024\001\234\016ORrNI&\273\312+\237\361\307\206\377\000\341.\360^\251\241\211<\271.\242\375\323\226\300\022)\016\233\216\017\313\271W8\031\306q\315|\201\341]b\343\301\2369\323\265)\322x$\323\356\300\272\213\312\036`L\355\2256\267F*Yy\306\011\352\0175\366\334\023\303uo\025\305\274\261\315\004\250\0369#`\312\352FA\004pA\034\346\274\017\366\206\360\\Q\305o\342\333\013LH\362\371Z\224\241\235\213eUbb9UQ\260\251<r\313\324\232\300\370\021\343\377\000\354\015s\376\021\253\3711\246\352r\217 \210\267\024\272m\252\271#\235\254\000S\301\301\013\320n5\364\375\024Q^\007\373Ki\244\333\350\032\242\264\230G\226\335\324\231\012\362\025\224\2166)\371[<\206n>\360_\226\207\354\323\251C\026\263\257\351l\262y\367\026\361\\#\0006\205\215\231X\036s\234\312\270\343\261\351\337\334\374O\341\215/\305\332\034\332F\257\007\233o'*\313\303\304\343\243\241\354\303'\363 \202\011\007\344\215cL\326>\024|ED\216m\367Z|\251qm8WD\270\214\3628\310%H\3120\007\037yrz\327\324\376\005\361\326\227\343\315\014_\330\037*\342<-\325\243\266^\335\317c\352\247\007\015\337\035\210 u\024W\037\361CR\327to\207\372\216\247\341\351\274\253\353]\222\026\026\342f\362\367\000\370\007\201\200rX\206\001Cp>\360\361\317\207\377\000\035\365x|A\344x\313Q\216}.t \334\233p\255l\300\022\010\021&X1\302\220Gpr0A\346\365o\211\037\020<y\256K\375\2136\253\014q\356\222\033\015\037\314\314Q\374\243\3461\200\317\3749f\343,p\024\034Q\245\374U\361\357\203\257\006\235\251\335_K\345\335\305=\305\276\244\011\234\240\031h\267H\013"\272\221\333\214\002\270\311\335\333\370\237\366\211\363\274=k\377\000\010\325\237\331\2659\367\245\327\332\327\177\331\276A\203\036>W\3131\301o\371\346r\2370\2578\261\327>(}\216=n\326\377\000\305sX\303\231\205\321y\345\203\010N\342\304\345\012\202\2479\310\340\203^\201\360\347\343\315\357\366\217\366o\214\245\373Lw2\242\301~\251\034^Ab\024\211\000\332\276X\373\333\272\214\036\240\215\277A\301<7V\361\\[\313\034\320J\201\343\2226\014\256\244d\020G\004\021\316jJ(\242\212+\305\3764\374*}~'\361/\207\355|\315Y2\327\260)f{\244\012\252\245\0018\334\241~\350\003vOR\000>1\360\367\342\026\243\360\377\000X{\233d\373E\214\370\373]\236U<\375\252\341>r\254Wi|\361\327\241\254\377\000\034\334i\327\2369\326\257t\233\357\266\330\335\335\275\314s\371M\026|\303\274\256\326\347\345,W'\256\334\367\257\242\377\000g\333\366\274\370d c&,\257e\201w2\221\202\026O\227\012\010\031\220\365,s\236q\205\036\251E\025\340\177\032\276\023\315uq'\212|9e$\323\312\350\267v\026\226\345\231\330\226\3358\301\311$\354\005U}X\377\000\021\256C\341\267\306{\277\005X.\221\250\332I\250ij\352 X\335#kU.\315!\037.d$\266p\314:c#<v\377\000\025>.xKZ\360\035\346\223\243\\G\252\\^\272D\321\274S\304"Pwy\231*\273\210e\\\014\365 \220@ \374\351_c\374,\361\322x\353\302Q\334Jq\251\331\355\202\365K.Y\302\217\336\200\270\302\277$p0C\001\235\271=\305\024W\227\374~\323>\337\360\276{\237;\313\376\317\273\206\347n\334\371\231&-\271\317\037\353s\236~\356;\344|\321\341\277\024\353>\021\324d\277\320\357>\311u$F\026\177)$\312\022\011\030pGU\037\225u\037\360\273~!\377\000\320\303\377\000\222V\377\000\374n\271\377\000\023\370\333\304^1\373/\366\376\241\366\317\262\357\362\177s\034{wcw\334Q\234\355^\276\224x7\305\332\217\202\274C\026\255\2477\244w\021a\177}\016\365f\217%N\334\355\003p\031\025\366?\2

正常么?
...全文
883 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
simen513 2017-09-16
  • 打赏
  • 举报
回复
bob的读取,应该要放到一个循环里。
zhenzhu6485 2017-09-16
  • 打赏
  • 举报
回复
引用 1 楼 trainee 的回复:
python 不懂 但以上格式 是 bytea的 字符表现形式方式, 如果最后转了一圈后文件变成这样,说明没转码 在libpq或php , bytea存入和取出需要escape和unescape类似的转码函数, 但不知在python是什么
关键是我现在用cur.fetchone()导出的数据居然是tuple格式的内存地址。。。。。
trainee 2017-09-14
  • 打赏
  • 举报
回复
python 不懂 但以上格式 是 bytea的 字符表现形式方式, 如果最后转了一圈后文件变成这样,说明没转码 在libpq或php , bytea存入和取出需要escape和unescape类似的转码函数, 但不知在python是什么

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧