小马 ORM order_by JSON 整数值



Pony ORM似乎按Json值的字符串而不是整数值排序。有没有办法正确订购?

下面是一个示例:

from pony.orm import (
Database, Required, Optional, db_session, commit,
show, Json)
db = Database()
db.bind('sqlite', filename=':memory:', create_db=True)
class Person(db.Entity):
name = Required(str)
body = Optional(Json, default={})
db.generate_mapping(create_tables=True)

with db_session:
Person(name='bort', body={'age': 1})
Person(name='baz', body={'age': 2})
Person(name='bar', body={'age': 10})
Person(name='foo', body={'age': 20})
commit()
people = Person.select().order_by(lambda p: p.body['age'])
show(people)

输出:

id|name|body       
--+----+-----------
1 |bort|{'age': 1} 
3 |bar |{'age': 10}
2 |baz |{'age': 2} 
4 |foo |{'age': 20}

有没有办法解决这个问题,Pony ORM 不支持这一点,还是我做错了什么?

此问题已在0.7.3中解决。

注释:导致 Pony 引发和异常:">
类型错误:函数 'int' 不能这样使用:int(p.body['age'](">

无法与pony验证,请尝试pony是否接受:

def _int(v):
return int(v)
people = Person.select().order_by(lambda p: _int(p.body['age']))

问题:有没有办法解决这个问题,Pony ORM 不支持这个吗

您正在使用sqlite,关于文档jsonstr
解决方法:

lambda p: int(p.body['age'])

纯 Python没有给我错误。

Pony ORM:数据库中的 JSON 支持 为了在数据库中
存储 JSON,Pony 使用以下类型:

SQLite - TEXT
PostgreSQL - JSONB (binary JSON)
MySQL - JSON (binary JSON, although it doesn’t have ‘B’ in the name)
Oracle - CLOB

从版本 3.9 开始,SQLite 提供了 JSON1 扩展模块。此扩展提高了使用 JSON 查询时的性能,尽管即使没有此模块,Pony 也可以在 SQLite 中使用 JSON。

最新更新