我在声明基础
中有以下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
?
答案 0 :(得分:1)
Python的json
模块并没有试图弄清楚如何序列化任意对象。它只知道Python types that have an equivalent JSON type:dict
,list
,str
,int
,float
,bool
,{{1 }}。您需要指示如何转储其他类型。 SQLAlchemy模型可能特别复杂:有许多列类型不具有等效的JSON类型,您是否嵌入关系或仅包含其外键,混合属性等等,而不是尝试为您做出决策,Python要求您告诉它如何将复杂对象简化为基本类型。