我正在使用Sqlite数据库,并使用flask,棉花糖,sqlalchemy充当前端项目的Web api。 我正在使用存储为数据库中的blob的UUID,并试图在数据返回调用代码时对其进行样式化。 我可以使用棉花糖的Function字段在模型中返回ID时将其转换,但是使用HyperLinks,该ID仍将作为字节数组字符串输出:
class Item(Base):
__tablename__ = 'Items'
Id = Column(LargeBinary, primary_key=True)
def __repr__(self):
return '<Item {}>'.format(self.Name)
class ItemSchema(ma.Schema):
Id = fields.Function(lambda obj: str(UUID(bytes=obj.Id)))
_links = ma.Hyperlinks(
{"url": ma.URLFor("item_detail", id="<Id>"), "collection": ma.URLFor("items")}
)
class Meta:
fields = ("_links", "Id")
是否可以格式化链接中输出的
{"url": ma.URLFor("item_detail", id="<str(UUID(bytes=Id))>"), "collection": ma.URLFor("items")}
这是当前的输出方式:
{"_links": {"url": "/api/items/b%27%5Cx86%5Cxacx__%5Cxf9%5Cxc2J%5Cx80a6%5Cxa7%5Cx95%5Cx10%5Cx91%5Cxff%27", "collection": "/api/items"}, "Id": "86ac785f-5ff9-c24a-8061-36a7951091ff"}
我希望它看起来像:
{"_links": {"url": "/api/items/86ac785f-5ff9-c24a-8061-36a7951091ff", "collection": "/api/items"}, "Id": "86ac785f-5ff9-c24a-8061-36a7951091ff"}
我希望链接使用UUID格式,而不是字节数组。
答案 0 :(得分:0)
我找到了解决方法。是建立模型的过程,而不是棉花糖。 当数据库将pk作为blob存储时,我能够使用SQLAlchemy_utils UUID列,将二进制文件设置为true,并且一切正常:
from sqlalchemy_utils import UUIDType
from uuid import UUID
....
Id = Column(UUIDType(binary=True), primary_key=True)