基于sqlalchemy的搜索工具
shoedog的Python项目详细描述
shoedog(在制品)
一个基于SqqLy的灵活高效的即插即用查询引擎 这个图书馆正在建设中!
设置
from shoedog import shoedoggify
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
shoedoggify(app, db)
上面的代码将在应用程序上设置一个接受POST
请求的/shoedog
端点。POST
请求上的负载是shoedog负载,语法如下:
query Company {
name
year_founded [(* > 1994 and * < 2017) or * == 2019]
investors {
name [any in ['gv', a16z']]
amount_invested [all > 2000000]
}
contact_details (SingaporeContact) {
address
singapore_contact_number
}
}
上面的查询将返回一个json响应,其中包含company的所有实例:
- 成立年份在1994年至2017年之间,或者正好是2019年
- 投资者投资额均超过200万美元
- 投资者至少包括一名投资者,其姓名为“gv”或“a16z”
此外,json响应具有可预测的结构,只返回请求的字段。
{'companies': [{
'name': 'XYZ Company',
'year_founded': 1995,
'investors': [{
'name': 'gv',
'amount_invested': 2000001
}],
'contact_details': {
'address': '123 Foobar Road',
'singapore_contact_number': '+65 9635 9999'
}
}, ...]}
注意
contact_details
作为字典返回,因为它是一个不同的模型。contact_details
字段被转换为SingaporeContact
,这允许我们查询仅在该特定子类上的singapore_contact_number
字段。如果没有cast,此查询将失败!