Python Flask-SQLAlchemy ORM 问题 ?

Python Flask-SQLAlchemy ORM 问题 ?

Python 的这个插件好难懂:

from sqlalchemy import Column, Integer, String

from lib.database import Base

class User(Base):

__tablename__ = '表名'

ID = Column(Integer, primary_key=True)

app_key = Column(String(50), unique=True)

secret = Column(String(120), unique=True)

def __init__(self, app_key=None, secret=None):

self.app_key = app_key

self.secret = secret

def __repr__(self):

return f'<User {self.app_key!r}>'

python">>>> from model.user import User

>>> User.query.all()

[User(ID=3, app_key='TEST_1a2a0ad5579b7b45fc675181c7aeba8b', secret='TEST_c8593ffbfdbfc86445ff91430c5cb3aafc65'), User(ID=4, app_key='aaaaaa', secret='aaaaaa')]>>>

为什么通过框架返回的时候就是:Unexpect System Error - Object of type User is not JSON serializable 有什么好的学习资料么,真的好难懂


回答:

你可以在 User 类中写一个方法来处理:

class User(Base):

# ...

def to_dict(self):

return {

"ID": self.ID,

"app_key": self.app_key,

"secret": self.secret,

}

然后用 to_dict 方法:

from flask import jsonify

@app.route("/users")

def get_users():

users = User.query.all()

return jsonify([user.to_dict() for user in users])

flask官方文档:https://flask.palletsprojects.com/en/2.1.x/
Flask-SQLAlchemy 官方文档:https://flask-sqlalchemy.palletsprojects.com/en/2.x/
你可以看看这些资料


回答:

你的 Base 是这样的吗?

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):

__tablename__ = '表名'

ID = Column(Integer, primary_key=True)

app_key = Column(String(50), unique=True)

secret = Column(String(120), unique=True)

def __init__(self, app_key=None, secret=None):

self.app_key = app_key

self.secret = secret

def __repr__(self):


回答:

我就不贴代码了,直接说原因吧

  1. 因为你返回的得是可以被序列化的对象,字符串或者dict
  2. 此处你返回的是一个obj对象

解决方法

  1. 重写json方法
  2. 使用序列化库,flask也有配套的序列化第三方库

以上是 Python Flask-SQLAlchemy ORM 问题 ? 的全部内容, 来源链接: utcz.com/p/938862.html

回到顶部