我希望以一种优雅的方式使用Flask和SQLAlchemy从列表中删除项目。在我的情况下,我想从数据库中删除旧项目(即小于某个特定时间的项目被视为旧项目)。
这是我的Python模型对象:
class ItemModel(db.Model):
__tablename__ = 'items'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
time = db.Column(db.Integer)
现在,我尝试使用以下filter_by查询来删除项目:
def delete_from_db(self):
db.session.query('items').filter_by(self.time <= epoch_time).delete()
db.session.commit()
我得到了以下错误:
filter_by()需要1个定位参数,但提供了2个
如果我尝试使用filter函数而不是filter_by函数,我也会收到一个错误:
def delete_from_db(self):
db.session.query('items').filter(self.time <= epoch_time).delete()
db.session.commit()
sqlalchemy.exc.InvalidRequestError: 此操作要求只指定一个表或实体作为目标。
最终,我决定回到基础并使用SQL代码,这样可以解决问题,但我认为这并不太优雅:
def delete_from_db(self):
from sqlalchemy.sql import text
cmd = 'delete from items where time <= :time'
db.engine.execute(text(cmd), time = epoch_time)
db.session.commit()
有没有更优雅的方式使用Flask和SQLAchlemy来完成这个任务?
SELECT items
。这种情况下异常信息有点误导。 - Ilja Everilä