1.首先對於blob類型做一個說明:
對於mysql或者mariadb有4個可選的blob類型:
tinyblob:最大存儲數據的長度為255字節
blob:最大存儲的數據長度為65535字節,也就是65Kb
mediumblob:最大存儲的數據長度為16777215字節,也就是16Mb
longblob:最大存儲的數據長度為4,294,967,295(232 - 1)字節,也就是4Gb
2. blob類型的用途
通常這種類型的字段用於存儲二進制文件,例如 圖片、視頻、音頻、文檔等
3. 向數據庫的blob字段中插入數據,並查詢
# -*- coding:utf-8 -*- import mariadb # 連接數據庫 conn = mariadb.connect( user="mysql", # 數據庫賬號 password="passwd", #數據庫密碼 host="192.168.1.101", # 數據庫主機名或IP地址 database = "employee", #指定數據庫(可選) port=3306, #端口 autocommit = True # DB更新操作是否自動commit(可選參數) ) # 打開圖片文件 with open('C:\\Users\\xiaoming\\Desktop\\100001.jpg', 'rb') as file: fp = file.read() # 定義sql的插入語句 sql_insert = '''INSERT INTO staff (uid, name, photo) values(?,?,?)''' values = [('100001','小明',fp)] # 打開數據庫游標 cur = conn.cursor() # 執行sql語句,進行插入數據 cur.executemany(sql_insert,values) #執行SQL語句 # 定義數據庫查詢語句 sql_select = '''select photo from staff where uid=\'100001\';''' # 執行sql語句 cur.execute(sql_select) # 讀取查詢數據 photo_data = cur.fetchall() print(type(photo_data))
#關閉數據庫連接 conn.close()
插入數據后,還可以使用數據庫客戶端工具進行查看,比如DBeaver
4. 更新數據庫中的blob類型的字段內容
對於update操作,是比較特殊的,如果直接通過類似 UPDATE staff SET photo=b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x.... WHERE uid='100001';的更新語句,會報語法錯誤。
對於更新操作,可以采用如下的方式:
# -*- coding:utf-8 -*- import mariadb # 連接數據庫 conn = mariadb.connect( user="mysql", # 數據庫賬號 password="passwd", #數據庫密碼 host="192.168.1.101", # 數據庫主機名或IP地址 database = "employee", #指定數據庫(可選) port=3306, #端口 autocommit = True # DB更新操作是否自動commit(可選參數) ) # 打開圖片文件 with open('C:\\Users\\xiaoming\\Desktop\\100001_1.jpg', 'rb') as file: fp = file.read() # 定義sql的插入語句 sql_update = '''update staff set photo=%s where uid=\'100001\';''' args = (fp) # 打開數據庫游標 cur = conn.cursor() # 執行sql語句,進行插入數據 cur.execute(sql_update,args) #執行SQL語句 #關閉數據庫連接 conn.close()