我有一个使用flask-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.
答案 0 :(得分:3)
我来这里是为了寻找这个问题的答案(这是Google的第一个热门)。 @ScottLee的答案将我引向正确的信息。他的解决方案是一个选择,但后果没有解释。
基本上,当您发出各种SQLAlchemy方法时,SQLAlchemy会在Python中维护会话。删除条目时,SQLAlchemy将如何从会话中删除所有已删除的行?这由删除方法的参数“ synchronize_session”控制。 syncnize_session有三种可能:
您使用哪个选项在很大程度上取决于代码如何使用会话。在大多数只需要根据复杂查询删除行的简单查询中, False 应该可以正常工作。 (问题中的示例适合这种情况)
答案 1 :(得分:-2)
尝试使用以下代码:
Stock.query.filter(Stock.ticker.in_(new_tickers)).delete(synchronize_session=False)