是什么让SQLAlchemy模型不可序列化?

时间:2015-10-10 19:46:32

标签: python json flask flask-sqlalchemy

我在声明基础

中有以下Flask-SQLAlchemy模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    pw = db.Column(db.String(20), unique=False)
    last_login = db.Column(db.DATETIME)

    posts = db.relationship('Post', backref='User')

    def __init__(self, i, u, p):
        self.id = i
        self.username = u
        self.pw = p

    def __repr__(self) -> str:
        return '<User %s, id = %d>' % (self.username, self.id)


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    rest_text = db.Column(db.Text)
    date = db.Column(db.DateTime)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __init__(self, title: str, rest: str, author: User):
        self.author = author
        self.title = title
       self.rest_text = rest
        self.date = datetime.now()
        self.id = randint(0, MAX_POSTS_NUM)
        while self.id in db.session.query(Post.id).all():
            self.id = randint(0, MAX_POSTS_NUM)

其中db是从我的Flask应用程序的SQLAlchemy(app)文件导入的__init__对象的实例。我有一个已经存在的sqlite3数据库,只有一个用户,名为&#39; test&#39;,当我在Flask中使用

进行查询时
u = User.query.filter_by(username='test').first()
u.username

我收到以下错误

TypeError: <User test, id = 1> is not JSON serializable

问题为什么这不是JSON serializable。什么使类/模型成为JSON serializable

1 个答案:

答案 0 :(得分:1)

Python的json模块并没有试图弄清楚如何序列化任意对象。它只知道Python types that have an equivalent JSON typedictliststrintfloatbool,{{1 }}。您需要指示如何转储其他类型。 SQLAlchemy模型可能特别复杂:有许多列类型不具有等效的JSON类型,您是否嵌入关系或仅包含其外键,混合属性等等,而不是尝试为您做出决策,Python要求您告诉它如何将复杂对象简化为基本类型。