commit_unless_managed clarification for multiple databases in the docs
|Reported by:||Owned by:||Jason Kotenko|
|Severity:||Keywords:||transaction, commit_unless_managed, raw sql, multiple databases, easy-pickings|
|Cc:||toqueteos@…, Jason Kotenko||Triage Stage:||Accepted|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
First ticket of mine here guys.
( Please be nice )
Today I was working with a two databases setup: default and my_other_db.
I wrote a function to execute some queries on my_other_db.
def email_update(email, password): """ Update a email account from the database with a new password. """ cursor = connections["my_other_db"].cursor() query = "UPDATE users SET password=ENCRYPT(%s) WHERE email=%s" # Perform the query cursor.execute(query, [password, email]) # Hey Django, ensure changes are done to the DB transaction.commit_unless_managed()
So the problem is that the last line does nothing.
Well, it does something, a rollback on the query because I'm not hitting the right db, the one I chose from the connections dict.
Specifying, again, the database alias name on the commit_unless_managed method, with the using keyword argument makes the function to work.
I think, a tiny one-two lines note placed below the third paragraph of the section called Executing custom SQL directly at http://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly should be ok.
Hope it helps.
Where's the DRY principle of Django here?
That transaction should look for the database alias used with the cursor, right?
Change History (6)
comment:1 Changed 6 years ago by
|Patch needs improvement:||unset|
|Triage Stage:||Unreviewed → Accepted|