【问题标题】:Flask RESTless delete multiple primary keyFlask RESTless 删除多个主键
【发布时间】:2014-07-18 08:10:09
【问题描述】:

我对 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

希望这个问题很清楚:)

非常感谢!

【问题讨论】:

    标签: python json flask-restless


    【解决方案1】:

    我最近遇到了类似的问题。问题是flask-restless 喜欢假设主键是非复合的。

    但是,有非常好的解决方法。首先,您需要为您的端点启用多删除和多补丁:

     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}

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 2013-02-07
      • 2010-09-06
      • 2015-05-24
      • 2023-03-13
      • 2014-03-09
      • 2015-04-04
      • 1970-01-01
      • 2015-09-09
      相关资源
      最近更新 更多