记 Python 之 Orm Peewee 部分使用方法

函数 TIMESTAMPDIFF

1
2
3
4
5
6
from peewee import SQL, fn

Task.select().where(
(Task.recent_sync_time.is_null(True))
| (fn.TIMESTAMPDIFF(SQL("MINUTE"), Task.recent_sync_time, fn.NOW()) > Task.interval)
)

注意这里的 MINUTE 必须使用 SQL 函数格式化,如:SQL("MINUTE")

参考

JSONField

Peewee 中本来是没有 JSONField 这个数据类型的,我们可以利用官方的扩展包

1
from playhouse.mysql_ext import JSONField

也可以通过自定义类型或者 jsonfield 这个三方包完成

参考

Model To Dict

1
2
3
4
5
6
7
from playhouse.shortcuts import model_to_dict

def get_data_list(info_id):
datas = Data.select().where(Data.info_id == info_id)
datas = [model_to_dict(data) for data in datas]
return datas

json_extract

1
2
3
4
Data.delete().where(
Data.info_id == info_id,
fn.json_extract(Data.data, "$." + field) == value,
).execute()