I thought we have a github for DELETE..LIMIT but we dont. This would be a construct specific to the MySQL dialect: from sqlalchemy.dialects.mysql import delete , where it would include order_by() and limit() params. We don't have internal resources to carry this through so we'd rely upon high quality pull requests with tests, once the issue is created.
for now I would suggest using text() for the case that an application needs this extremely unusual construct once in awhile. On Fri, Sep 22, 2023, at 7:16 AM, 'Grennith' via sqlalchemy wrote: > Hi everyone, > I'd like to issue a LIMIT for a DELETE statement. > By default, this is not possible as far as I can see it. The function limit() > is available for SELECT in general however. > Searching through documentation, I found a reference to with_dialect_option(): > https://docs.sqlalchemy.org/en/20/search.html?q=with_dialect_options&check_keywords=yes&area=default# > Which points to > https://docs.sqlalchemy.org/en/20/core/dml.html#sqlalchemy.sql.expression.UpdateBase.with_dialect_options > claiming the function to be available in UpdateBase (although the > documentation off given the claimed method is not callable like documented). > This was the case in 1.4 > (https://github.com/sqlalchemy/sqlalchemy/blob/rel_1_4/lib/sqlalchemy/sql/dml.py#L345) > already and also in 2.0 > (https://github.com/sqlalchemy/sqlalchemy/blob/main/lib/sqlalchemy/sql/dml.py#L438). > > However, trying to call it as per documentation results in an exception being > raised: > ``` > sqlalchemy.exc.ArgumentError: Argument 'mysql_limit' is not accepted by > dialect 'mysql' on behalf of <class 'sqlalchemy.sql.dml.Delete'> > ``` > This is caused by > https://github.com/sqlalchemy/sqlalchemy/blob/main/lib/sqlalchemy/dialects/mysql/base.py#L2454 > not listing sql.Delete explicitly. UpdateBase apparently cannot be > referenced either given the import (guessing as it's not imported explicitly > in > https://github.com/sqlalchemy/sqlalchemy/blob/main/lib/sqlalchemy/sql/__init__.py > or not referenced another way?). > However, by adding Delete just like Update will have the following line run > fine without an error - but not adding the LIMIT either. My best guess right > now would be due to the lack of limit clause handling? > ``` > stmt = stmt.with_dialect_options(mysql_limit=limit, mariadb_limit=limit) > ``` > where `limit` simply is an integer. > > > Any hints or help is appreciated. I can also raise a ticket on Github :) > > Best regards > > > > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/f13a8ca6-3e52-4287-a6a4-52b5b4672470n%40googlegroups.com > > <https://groups.google.com/d/msgid/sqlalchemy/f13a8ca6-3e52-4287-a6a4-52b5b4672470n%40googlegroups.com?utm_medium=email&utm_source=footer>. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/ae24d467-9750-496a-a3b7-1da85afc70f2%40app.fastmail.com.