mysql库可以保存图片了吗
时间: 2023-03-31 12:03:58 浏览: 170
可以,MySQL可以保存图片,可以将图片以二进制形式存储在BLOB字段中。但是,这种方式并不是最优的,因为会占用大量的存储空间,而且读取速度也会比较慢。因此,建议将图片保存在文件系统中,然后在数据库中保存图片的路径。
相关问题
保存图片到MySQL&从MySQL读取图片
在MySQL中保存图片可以使用BLOB类型,BLOB类型是二进制类型,可以存储各种二进制数据,包括图片、音频、视频等。
1. 保存图片到MySQL
使用Python中的MySQL Connector库连接MySQL数据库,将图片转换为二进制数据,然后将二进制数据存储到MySQL数据库中。
```python
import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode
# 读取图片并转换为二进制数据
with open("image.jpg", "rb") as image_file:
image_data = image_file.read()
try:
# 连接MySQL数据库
connection = mysql.connector.connect(
host='localhost',
database='test',
user='root',
password='password')
# 插入二进制数据到MySQL数据库中
cursor = connection.cursor()
sql_insert_blob_query = """ INSERT INTO images
(id, image) VALUES (%s,%s)"""
insert_blob_tuple = (1, image_data)
result = cursor.execute(sql_insert_blob_query, insert_blob_tuple)
connection.commit()
print("Image inserted successfully as a BLOB into MySQL database")
except mysql.connector.Error as error:
print("Failed inserting BLOB data into MySQL table {}".format(error))
finally:
if (connection.is_connected()):
cursor.close()
connection.close()
print("MySQL connection is closed")
```
在上面的例子中,首先使用Python中的open()函数读取图片,并将其转换为二进制数据。然后,使用MySQL Connector库连接MySQL数据库,使用INSERT语句将二进制数据插入到BLOB类型的列中。
2. 从MySQL读取图片
从MySQL数据库读取图片也很简单,只需使用SELECT查询语句,然后将查询结果转换为二进制数据,再将其写入到文件中即可。
```python
import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode
try:
# 连接MySQL数据库
connection = mysql.connector.connect(
host='localhost',
database='test',
user='root',
password='password')
# 查询BLOB类型的数据
cursor = connection.cursor()
sql_fetch_blob_query = """SELECT image from images where id = %s"""
cursor.execute(sql_fetch_blob_query, (1,))
record = cursor.fetchone()
image = record[0]
# 将二进制数据写入到文件中
with open("image.jpg", "wb") as file:
file.write(image)
print("Image extracted successfully from MySQL database")
except mysql.connector.Error as error:
print("Failed reading BLOB data from MySQL table {}".format(error))
finally:
if (connection.is_connected()):
cursor.close()
connection.close()
print("MySQL connection is closed")
```
在上面的例子中,首先使用SELECT查询语句查询BLOB类型的数据,然后将查询结果转换为二进制数据。接着,使用open()函数将二进制数据写入到文件中。
python图片压缩保存到mysql
首先,我们需要安装Pillow库用于图片处理和MySQLdb库用于连接MySQL数据库。在命令行中输入以下命令安装:
```
pip install pillow
pip install mysqlclient
```
然后,我们可以使用以下代码将图片压缩并保存到MySQL数据库中:
```python
from PIL import Image
import io
import MySQLdb
# 打开图片并压缩
image = Image.open('image.jpg')
image = image.resize((800, 600), resample=Image.LANCZOS)
# 将图片保存到内存中
with io.BytesIO() as output:
image.save(output, format='JPEG', quality=50)
content = output.getvalue()
# 连接MySQL数据库
conn = MySQLdb.connect(host='localhost', user='root', password='password', database='test', charset='utf8')
# 插入图片数据
try:
with conn.cursor() as cursor:
sql = 'INSERT INTO images (content) VALUES (%s)'
cursor.execute(sql, (content,))
conn.commit()
except Exception as e:
print(e)
finally:
conn.close()
```
在上面的代码中,我们首先使用Pillow库打开原始图片并将其压缩到800x600。然后,我们使用BytesIO将压缩后的图片保存到内存中。最后,我们使用MySQLdb库连接到MySQL数据库并将图片数据插入到数据库中。
注意,我们在插入数据时使用了占位符来避免SQL注入攻击。我们还必须在最后关闭数据库连接。
阅读全文