我有一个小问题Flask RESTless,也许你可以帮助我:)
我的SQL(和SQLAlchemy)中有一些表是N..N关系的结果,它们的主键是两列的和。例如
Table 1 Key / Table 2 Key / Some data
0 0 Bla
0 1 Blabla
1 0 Morebla
1 1 Silenceisgolden
如果我使用带有ID的GET动词,例如0,RESTless只使用"Table 1 Key"并返回0,0,Bla。
我可以使用查询语言(?q=)并得到0,0和0,1。
问题是:如何只选择带有PATCH或DELETE动词的一个?我只能DELETE或PATCH 0,0
希望这个问题是清楚的:)
多谢!
我最近也遇到过类似的问题。问题是flask-restless喜欢假设主键是非复合键。
然而,有一个非常好的解决方法。首先,您需要为端点启用multi-DELETE和multi-PATCH:
manager.create_api(
Your_Composite_Model, # flask-sqlalchemy model class
methods=['GET', 'POST', 'DELETE', 'PATCH'],
allow_delete_many=True,
allow_patch_many=True)
此更改允许您使用flask-restless'查询参数删除或修补表中的项目,您可以使用该参数来过滤您希望删除的确切行。
下面是一个使用请求库的python脚本,用于删除上述复合表中的第二行(并且仅删除第二行):
import requests
import json
url = 'http://127.0.0.1:5000/api/your_composite_model'
headers = {'Content-Type': 'application/json'}
filters = [
dict(name='table_1_key', op='eq', val='0'),
dict(name='table_2_key', op='eq', val='1'),
]
params = dict(q=json.dumps(dict(filters=filters)))
response = requests.delete(url, params=params, headers=headers)
print(response.json())
~
输出应该是:{u'num_deleted': 1}