Giter Site home page Giter Site logo

Comments (5)

ryanhiebert avatar ryanhiebert commented on July 22, 2024 1

I'm seeing this issue or a variant of it, but I've needed to use the CTEQuerySet, so using the regular manager wasn't really an option, but I was able to do what I needed in my case by updating directly with filtering only on the ids from values_list.

from django-cte.

Azd325 avatar Azd325 commented on July 22, 2024

I'm running also in this issue.

product.py:1900: in update_products
    products_with.update(has_product_in_same_category=True)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/models/query.py:741: in update
    rows = query.get_compiler(self.db).execute_sql(CURSOR)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/models/sql/compiler.py:1471: in execute_sql
    cursor = super().execute_sql(result_type)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/models/sql/compiler.py:1142: in execute_sql
    cursor.execute(sql, params)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/backends/utils.py:67: in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/backends/utils.py:76: in _execute_with_wrappers
    return executor(sql, params, many, context)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/backends/utils.py:84: in _execute
    return self.cursor.execute(sql, params)
../../.pyenv/versions/3.7.2/envs/project/lib/python3.7/site-packages/django/db/utils.py:89: in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value

from django-cte.

timworx avatar timworx commented on July 22, 2024

I'm running into this issue currently.

I can't replace the objects manager without this blowing up other parts of the app that use .update on the queryset.

I think it's winding up on the query here: https://github.com/django/django/blob/main/django/db/models/sql/compiler.py#L1646

from django-cte.

jnns avatar jnns commented on July 22, 2024

After making the test suite run in pytest instead of nose (#63), I wrote the following test to reproduce the behaviour of this issue:

@pytest.mark.skipif(
    connection.vendor == "sqlite",
    reason="SQLite doesn't fail on 'WHERE field IN ()'"
)
def test_regular_update_query(self):
    """Regression test for https://github.com/dimagi/django-cte/issues/9"""
    Order.objects.filter(region="mars").update(amount=100)  # Works.
    Order.objects.filter(region__parent="mars").update(amount=100)  # Doesn't work.

While the first queryset correctly produces the following query …

UPDATE "orders" SET "amount" = 100 WHERE "orders"."region_id" = 'mars'

… the latter results in:

UPDATE "orders" SET "amount" = %s WHERE "orders"."id" IN ()

I tried to pinpoint the issue and ended up with the same discoveries as @timworx: CTEQueryUpdateCompiler.pre_sql_setup() has a WHERE clause like this

<WhereNode: (AND: RelatedExact(Col(U1, tests.Region.parent), 'mars'))>

until self.query.clear_where() is called. It is then rebuilt with the broken WHERE clause when self.query.add_filter("pk__in", query) is called:

<WhereNode: (AND: In(Col(U0, tests.Order.id), <django_cte.query.CTEUpdateQuery object at 0x7ff13e3e9e10>))>

from django-cte.

millerdev avatar millerdev commented on July 22, 2024

Fixed by #71

from django-cte.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.