Flask sqlalchemy 将列表保存为 json
Flask sqlalchemy save list as json
我在 Flask-rest 中使用此模型,在 python3.5
中使用 sqlalchemy
class UserModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.String(600), nullable=False)
roles = db.Column(db.String(255), nullable=False)
我想在 json 中保存一个带有字符串列表(角色)的字符串。我想访问这个属性,就好像它是一个 python 列表而不是一个字符串(但将它保存在数据库中作为一个字符串,一个 json 列表)。
不接受table 选项:
1) 我可以使用 getter 和 setter 进行数据库之间的转换,但这不是我想要的。直接访问每个属性很奇怪,除了带有getters和setters的角色。
2) 使其与另一个 table 角色建立关系。我想将 table 的数量保持在最低限度。
有没有办法添加一个 method/something 来添加这个在从数据库检索和保存到数据库时自动从 json 转换到 json 的过程?
使用 hybrid property 怎么样?
import json
from sqlalchemy.ext.hybrid import hybrid_property
class UserModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.String(600), nullable=False)
_roles = db.Column('roles', db.String(255), nullable=False, default='[]', server_default='[]')
@hybrid_property
def roles(self):
return json.loads(self._roles)
@roles.setter
def roles(self, roles):
self._roles = json.dumps(roles)
编辑:添加了@monstercode
建议的更改
我在 Flask-rest 中使用此模型,在 python3.5
中使用 sqlalchemyclass UserModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.String(600), nullable=False)
roles = db.Column(db.String(255), nullable=False)
我想在 json 中保存一个带有字符串列表(角色)的字符串。我想访问这个属性,就好像它是一个 python 列表而不是一个字符串(但将它保存在数据库中作为一个字符串,一个 json 列表)。
不接受table 选项:
1) 我可以使用 getter 和 setter 进行数据库之间的转换,但这不是我想要的。直接访问每个属性很奇怪,除了带有getters和setters的角色。
2) 使其与另一个 table 角色建立关系。我想将 table 的数量保持在最低限度。
有没有办法添加一个 method/something 来添加这个在从数据库检索和保存到数据库时自动从 json 转换到 json 的过程?
使用 hybrid property 怎么样?
import json
from sqlalchemy.ext.hybrid import hybrid_property
class UserModel(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(255), unique=True, nullable=False)
password = db.Column(db.String(600), nullable=False)
_roles = db.Column('roles', db.String(255), nullable=False, default='[]', server_default='[]')
@hybrid_property
def roles(self):
return json.loads(self._roles)
@roles.setter
def roles(self, roles):
self._roles = json.dumps(roles)
编辑:添加了@monstercode
建议的更改