3

我对 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 仅使用“表 1 键”并返回 0,0,Bla。

我可以使用查询语言 (?q=) 并获得 0,0 和 0,1。

问题是:我如何只能选择一个带有 PATCH 或 DELETE 动词的?我只能删除或修补 0,0

希望这个问题很清楚:)

非常感谢!

4

1 回答 1

1

我最近遇到了类似的问题。问题是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 的查询参数删除或修补表中的项目,您可以使用该参数过滤您希望删除的确切行。

下面是一个使用 requests 库的 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}

于 2016-10-21T12:54:14.923 回答