commit_unless_managed clarification for multiple databases in the docs
|Reported by:||toqueteos@…||Owned by:||jasonkotenko|
|Severity:||Keywords:||transaction, commit_unless_managed, raw sql, multiple databases, easy-pickings|
|Cc:||toqueteos@…, jasonkotenko||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 4 years ago by gabrielhurley
- Keywords easy-pickings added
- Needs documentation unset
- Needs tests unset
- Patch needs improvement unset
- Triage Stage changed from Unreviewed to Accepted
comment:2 Changed 4 years ago by jasonkotenko
- Owner changed from nobody to jasonkotenko
- Status changed from new to assigned
Changed 4 years ago by jasonkotenko
comment:4 Changed 4 years ago by Alex
- Resolution set to fixed
- Status changed from assigned to closed