由于Peewee中的“删除”查询不允许加入,删除table_2中与相关table_1中的特定条件匹配的所有记录的最佳方法是什么?
使用一个简单的例子,我想实现相当于:
DELETE message.*
FROM message
JOIN user ON message.from_user_id = user.id
WHERE user.name = "Joe";
答案 0 :(得分:7)
您应该将子查询用于此类事物,例如:
joe = User.select().where(User.username == 'Joe')
Message.delete().where(Message.from_user == joe).execute()
假设您要删除“禁止”用户的所有邮件。你可以写:
banned_users = User.select().where(User.is_banned == True)
Message.delete().where(Message.user.in_(banned_users)).execute()
答案 1 :(得分:0)
如果您使用的是Postgresql,则可以使用USING
clause
name_to_delete = 'Joe'
query = Message.raw("""
DELETE FROM message
USING user
WHERE
message.from_user_id = user.id AND
user.name = %s
""", name_to_delete)
query.execute()