一般情況下我們是把圖片存儲在文件系統中,而只在數據庫中存儲文件路徑的,但是有時候也會有特殊的需求:把圖片二進制存入數據庫。
今天我們采用的是python+mysql的方式
MYSQL 是支持把圖片存入數據庫的,也相應的有一個專門的字段 BLOB (Binary Large Object),即較大的二進制對象
還有個更大的存二進制的LONGBLOB;
這里需要注意:盡量把字段設置大一些,因為如果設置的字段長度過小,就會出現圖片只顯示一部分的情況。第二:如果數據量大的話盡量避免使用這種方式進行,因為mysql對於大數據的查詢速度會很慢。
下面上代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/usr/bin/python
#-*- coding: UTF-8 -*-
import
MySQLdb as mysql
import
sys
try
:
#讀取圖片文件
fp
=
open
(
"./test.jpg"
)
img
=
fp.read()
fp.close()
except
IOError,e:
print
"Error %d %s"
%
(e.args[
0
],e.args[
1
])
sys.exit(
1
)
try
:
#mysql連接
conn
=
mysql.connect(host
=
'localhost'
,user
=
'root'
,passwd
=
'123456'
,db
=
'test'
)
cursor
=
conn.cursor()
#注意使用Binary()函數來指定存儲的是二進制
cursor.execute(
"INSERT INTO images SET data='%s'"
%
mysql.Binary(img))
#如果數據庫沒有設置自動提交,這里要提交一下
conn.commit()
cursor.close()
#關閉數據庫連接
conn.close()
except
mysql.Error,e:
print
"Error %d %s"
%
(e.args[
0
],e.args[
1
])
sys.exit(
1
)
|