3

私はFlask RESTlessに少し問題があります.多分あなたは私を助けることができます:)

N..N 関係の結果である SQL (および SQLAlchemy) にいくつかのテーブルがあり、それらの主キーは 2 つの列の合計です。例えば

Table 1 Key / Table 2 Key / Some data
0             0             Bla
0             1             Blabla
1             0             Morebla
1             1             Silenceisgolden

例 0 の ID で GET 動詞を使用すると、RESTless は "Table 1 Key" のみを使用し、0,0,Bla を返します。

クエリ Language (?q=) を使用して、0,0 と 0,1 の両方を取得できます。

質問: PATCH または DELETE 動詞で 1 つだけを選択するにはどうすればよいですか? DELETE または PATCH 0,0 しかできない

この質問が明確であることを願っています:)

どうもありがとう!

4

1 に答える 1

1

最近、同様の問題がありました。問題は、flask-restless が主キーが非複合キーであると想定するのが好きなことです。

ただし、完全に優れた回避策があります。まず、エンドポイントで複数の DELETE と複数の 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 のクエリ パラメータを使用して、テーブル内のアイテムを削除またはパッチすることができます。これを使用して、削除する正確な行をフィルタリングできます。

以下は、上記の複合テーブルの 2 行目 (および 2 行目のみ) を削除する 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 に答える