Đã tìm ra giải pháp
Tạo một lớp mở rộng FunctionElement như thế này
from sqlalchemy.sql.expression import FunctionElement
from sqlalchemy.ext.compiler import compiles
class json_array_length(FunctionElement):
name = 'json_array_len'
@compiles(json_array_length)
def compile(element, compiler, **kw):
return "json_array_length(%s)" % compiler.process(element.clauses)
và sử dụng nó như thế này
session.query(Post.id, json_array_length(Post.items))
Lưu ý:điều này sẽ hoạt động trên postgres vì hàm 'json_array_length' được định nghĩa trong đó. Nếu bạn muốn điều này cho một DB khác, chức năng đó sẽ cần phải thay đổi. Tham khảo http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html#further-examples