SQLAlchemy存储图片
时间: 2025-01-09 16:47:39 浏览: 1
### 使用 SQLAlchemy 存储图片
为了使用 SQLAlchemy 将图片存储到数据库中,通常会采用 `BLOB` 类型来保存二进制数据。下面展示了如何定义模型以及执行插入操作。
#### 定义表结构
首先,在创建表时需指定列的数据类型为 `LargeBinary` 来表示 BLOB 字段:
```python
from sqlalchemy import Column, Integer, String, LargeBinary, create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Image(Base):
__tablename__ = 'images'
id = Column(Integer, primary_key=True)
name = Column(String(50))
data = Column(LargeBinary) # 图片将以字节串形式存入此字段[^3]
```
#### 插入图像数据
当准备向该表内添加新记录时,可以读取本地磁盘上的文件并将其转换成适合写入数据库的形式:
```python
import os.path as osp
from PIL import Image as Img
def insert_image(session, image_path):
with open(image_path, "rb") as f:
binary_data = f.read()
img_name = osp.basename(image_path)
new_record = Image(name=img_name, data=binary_data)
session.add(new_record)
session.commit() # 提交更改以确保它们被持久化到数据库中[^1]
# 假设已经建立了有效的session连接...
insert_image(session, "/path/to/your/image.png")
```
#### 查询和显示图像
从数据库检索图像后,可以通过适当的方式处理这些二进制流以便于查看或进一步加工:
```python
from io import BytesIO
from flask import send_file
@app.route('/get-image/<int:image_id>')
def get_image(image_id):
result = session.query(Image).filter_by(id=image_id).first()
if not result:
abort(404)
return send_file(BytesIO(result.data), mimetype='image/png')
```
上述代码片段说明了怎样利用 Flask 和 SQLAlchemy 实现简单的 RESTful API 接口用于获取特定 ID 的图片资源[^4]。
阅读全文