support mysql DELETE FROM ... JOIN / Postgresql DELETE..USING ?

Issue #959 resolved
jek
created an issue

delete(table-or-join) should be acceptable with the mysql dialect and produce the expected DELETE FROM basetable JOIN etc. currently:

>>> metadata.bind = 'mysql:///test'
>>> print delete(parents_table)
DELETE FROM parents
>>> print delete(parents_table.join(children_table))
Traceback (most recent call last):
...
AttributeError: 'Join' object has no attribute 'name'
>>> print delete(parents_table.join(children_table).alias('x'))
DELETE FROM x

Comments (7)

  1. Michael Bayer repo owner

    Allow delete where clause to refer multiple tables.

    Implemented "DELETE..FROM" syntax for Postgresql, MySQL, MS SQL Server (as well as within the unsupported Sybase dialect) in a manner similar to how "UPDATE..FROM" works. A DELETE statement that refers to more than one table will switch into "multi-table" mode and render the appropriate "USING" or multi-table "FROM" clause as understood by the database. Pull request courtesy Pieter Mulder.

    For SQL syntaxes see:

    Postgresql: https://www.postgresql.org/docs/current/static/sql-delete.html MySQL: https://dev.mysql.com/doc/refman/5.7/en/delete.html#multiple-table_syntax MSSQL: https://docs.microsoft.com/en-us/sql/t-sql/statements/delete-transact-sql Sybase: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00801.1510/html/iqrefso/X315721.htm

    Co-authored by: Mike Bayer mike_mp@zzzcomputing.com Change-Id: I6dfd57b49e44a095d076dc493cd2360bb5d920d3 Pull-request: https://github.com/zzzeek/sqlalchemy/pull/392 Fixes: #959

    → <<cset d12b37f90ef5>>

  2. Log in to comment