rules:
  - id: delete-where-no-execute
    patterns:
      - pattern: $X.delete().where(...)
      - pattern-not-inside: $X.delete().where(...).execute()
      - pattern-not-inside: $C.execute(...)
    message:
      .delete().where(...) results in a no-op in SQLAlchemy unless the command is executed, use .filter(...).delete()
      instead.
    languages: [python]
    severity: ERROR
    metadata:
      category: correctness
      technology:
        - sqlalchemy
