MySQLでのBlobタイプデータの挿入と読み込み

1732 ワード

MySQLではBlobはバイナリオブジェクトで、大量のデータを格納できるコンテナ(画像、音楽など)であり、異なるサイズのデータを格納することができ、MySQLでは4種類のBlobタイプがあります.彼らの違いは、収容できる情報量の違いは、①TinyBlobタイプ最大255 B収容可能なデータ②Blobタイプ最大65 KB収容可能な③MediumBlobタイプ最大16 MB収容可能なデータ④LongBlobタイプ最大4 GB収容可能なデータの4種類ですの場合は、自分のニーズに合わせてこれらのタイプを選ぶことができますが、Blobに格納されているファイルのサイズが大きすぎると、データベースのパフォーマンスが悪くなります.具体的には、Blobタイプのデータを挿入し、Blobタイプのデータを読み取る方法について説明します.1、Blobタイプのデータを挿入するBlobタイプのデータを挿入する場合、PreparedStatementを使用する必要があります.Blobタイプのデータは文字列でつづることができないため、SQL文が入力後、PreparedStatementオブジェクトのsetBlob(int index,InputStreamin)メソッドを呼び出して、入力されたパラメータを設定する必要があります.indexはBlobタイプのデータに対応するプレースホルダ(?)を表します.を選択し、InputStreamタイプのinは挿入されたファイルのノードフローを表します.2、Blobタイプのデータを読み取るBlobタイプは比較的簡単で、クエリーの結果セットを取得した後、getBlob()メソッドを使用してBlobオブジェクトを読み取り、BlobのgetBinaryStream()メソッドを呼び出して入力ストリームを得、IO操作を使用して行ファイルへの書き込み操作を行えばよい.次に、Blobタイプのデータの挿入と読み取りを実現する具体的な例を示します.現在、ローカル・データベースには、pictureに格納されているデータ型がMediumBlobタイプであるテーブルanimalがあります.
自分で試したコードを貼る
#         
for i, key in enumerate(list(update_container.keys())):
    value = update_container[key].value
    value_str = value.tostring()
    shape = value.shape
    sql = 'insert into face_emb(uid, shape, emb) values (%s, %s, %s)'
    test_mysql.executeSqlManyByConn(sql, [key, str(shape[0]), value_str])
#         ,       
sql = 'select * from face_emb'
s = test_mysql.executeSqlByConn(sql)
print(s)
s1 = s.fetchall()
for i in range(len(s1)):
    userid, shape, emb_bytes = s1[i]
    tmb_list = np.fromstring(emb_bytes, dtype=np.float32)
    emb = tmb_list.reshape(shape, -1)
    print(emb.shape)

----------------------作者:クジラprogrammer出所:CSDN原文:https://blog.csdn.net/qq_38785658/article/details/75009700本文は博主のオリジナルの文章で、転載して博文のリンクを添付してください!