ティッカーがリストの1つに一致するデータベースからすべての株を削除したいフラスコsqlalchemyを使用するクエリがあります。これは私が現在持っているクエリです:
Stock.query.filter(Stock.ticker.in_(new_tickers)).delete()
どこ new_tickers
は、有効なティッカーのstr
のリストです。
私が得ているエラーは次のとおりです:
sqlalchemy.exc.InvalidRequestError: Could not evaluate current criteria in Python: "Cannot evaluate clauselist with operator <function comma_op at 0x1104e4730>". Specify 'fetch' or False for the synchronize_session parameter.
私はこの質問への答えを探してここに来ました(これは最初のGoogleヒットでした)。 @ScottLeeの答えは私を正しい情報に導きます。彼の解決策はオプションですが、影響は説明されていません。
基本的に、SQLAlchemyは、さまざまなSQLAlchemyメソッドを発行するときに、セッションをPythonで維持します。エントリを削除すると、SQLAlchemyはセッションから削除された行をどのように削除しますか?これは、deleteメソッドのパラメータによって制御されます。 、「synchronize_session」。synchronize_sessionには次の3つの可能性があります。
どちらのオプションを使用するかは、コードでのセッションの使用方法に大きく依存します。複雑なクエリに基づいて行を削除する必要があるほとんどの単純なクエリでは、Falseが適切に機能します。 (質問の例はこのシナリオに適合します)
このコードで試してください:
Stock.query.filter(Stock.ticker.in_(new_tickers)).delete(synchronize_session=False)