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?