首页 > 解决方案 > 将 PDF 添加到 sqlalchemy 数据库

问题描述

我有一个简单model的方法,我想将 PDF 文件的二进制内容存储在一个data属性中:

from app import db

    class Model(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        data = db.Column(db.PickleType, nullable=True)

我正在尝试将一些任意 PDF 文件添加到data属性中,如下所示:

@app.route('/')
def index() -> str:
    model = Model.query.get(1)
    model.data = open('./app/static/pdf/file.pdf', 'rb')
    db.session.commit()
    return ''

但我收到以下错误:

sqlalchemy.exc.StatementError: (builtins.TypeError) cannot serialize '_io.BufferedReader' object
[SQL: UPDATE model SET data=? WHERE model.id = ?]
[parameters: [{'data': <_io.BufferedReader name='./app/static/pdf/file.pdf'>, 'model_id': 1}]]

请问这样做的正确方法是什么?我应该如何序列化 PDF 文件?

谢谢你的帮助 :-)

标签: pythonpdfflasksqlalchemy

解决方案


和...之间的不同

model.data = open('./app/static/pdf/file.pdf', 'rb')

model.data = open('./app/static/pdf/file.pdf', 'rb').read()

是腌制文件句柄(有一些不可腌制的部分)和腌制字节数组之间的区别。


推荐阅读