使用棉花糖反序列化 UUID
Deserialize UUID using marshmallow
我在我的 RESTful flask 应用程序中使用 marshmallow 和 sqlalchemy 来序列化和反序列化我的模型(这是我第一次做所有这些)。我创建了一个路由来从 MySQL 数据库中检索所有用户。查询数据库时,我能够检索所有用户(id、first_name、last_name)。打印出用户时,我看到:
[
('UUID1', 'firstname1', 'lastname1'),
('UUID2', 'firstname2', 'lastname2')
]
注意: 我将 ID 存储为二进制文件并利用 BIN_TO_UUID() 和 UUID_TO_BIN() 数据库函数。
当我到达这条路线时得到的响应是:
[
{"first_name": "firstname1", "last_name": "lastname1"},
{"first_name": "firstname2", "last_name": "lastname2"}
]
class UsersSchema(Schema):
id = fields.UUID(attribute="id")
first_name = fields.String()
last_name = fields.String()
class Meta:
fields = ("id", "first_name", "last_name")
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Binary(16), primary_key=True)
first_name = db.Column(db.VARCHAR(255))
last_name = db.Column(db.VARCHAR(255))
@app.route('/users')
def users():
try:
users = db.session.query(
func.bin_to_uuid(Users.id),
Users.first_name,
Users.last_name,
).all()
except Exception as e:
print('we got an error in users route')
print(e)
finally:
return jsonify(UsersSchema(many=True).dump(users))
由于 bin_to_uuid
函数应用,您查询中的第一列可能未被称为 id
。然后架构不会产生 id
值,因为没有这样的列。解决方案应该是将查询中的第一列别名为 id
:
db.session.query(
func.bin_to_uuid(Users.id).label('id'),
Users.first_name,
Users.last_name,
)
我在我的 RESTful flask 应用程序中使用 marshmallow 和 sqlalchemy 来序列化和反序列化我的模型(这是我第一次做所有这些)。我创建了一个路由来从 MySQL 数据库中检索所有用户。查询数据库时,我能够检索所有用户(id、first_name、last_name)。打印出用户时,我看到:
[
('UUID1', 'firstname1', 'lastname1'),
('UUID2', 'firstname2', 'lastname2')
]
注意: 我将 ID 存储为二进制文件并利用 BIN_TO_UUID() 和 UUID_TO_BIN() 数据库函数。
当我到达这条路线时得到的响应是:
[
{"first_name": "firstname1", "last_name": "lastname1"},
{"first_name": "firstname2", "last_name": "lastname2"}
]
class UsersSchema(Schema):
id = fields.UUID(attribute="id")
first_name = fields.String()
last_name = fields.String()
class Meta:
fields = ("id", "first_name", "last_name")
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Binary(16), primary_key=True)
first_name = db.Column(db.VARCHAR(255))
last_name = db.Column(db.VARCHAR(255))
@app.route('/users')
def users():
try:
users = db.session.query(
func.bin_to_uuid(Users.id),
Users.first_name,
Users.last_name,
).all()
except Exception as e:
print('we got an error in users route')
print(e)
finally:
return jsonify(UsersSchema(many=True).dump(users))
由于 bin_to_uuid
函数应用,您查询中的第一列可能未被称为 id
。然后架构不会产生 id
值,因为没有这样的列。解决方案应该是将查询中的第一列别名为 id
:
db.session.query(
func.bin_to_uuid(Users.id).label('id'),
Users.first_name,
Users.last_name,
)