0

ファイルを BLOB として MySQL データベースに保存しようとしています。現在、DB は非常に単純で、1 つの列「ファイル」を longblob 型として持つテーブルです。

コードは次のとおりです。

file = open("file.txt","r")
data = file.readlines()
dp = pickle.dumps(data,1)
sql = "insert into Files values (%s)"
cursor.execute(sql,(MySQLdb.escape_string(dp),))

これは正常にアップロードされているようですが、データを取得するときに unpickle しようとすると EOFError が発生します。まったく酸洗いせずにプロセスを試してみると、文字列はエスケープ解除されず、ファイルに書き戻すときにエスケープ文字が文字列に残ります(エスケープ解除/再エスケープするためにそこに欠けているpythonステップがない限り)。

sql = "select File from Files"
cursor.execute(sql)
ret = cursor.fetchone()
pickle.loads(ret[0])

EOFError exception
4

2 に答える 2

0

pickle 化されたリストが適切に unpickle されなかった理由はわかりませんが、readlines リストを文字列に結合し、それをロングテキスト型として MySQL にアップロードすることで、これを回避することができました。

于 2013-08-26T14:47:40.040 に答える