id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux
15243,commit_unless_managed clarification for multiple databases in the docs,toqueteos@…,jasonkotenko,"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'''.
Example code:
{{{#!python
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.
Example:
{{{#!python
transaction.commit_unless_managed(using=""my_other_db"")
}}}
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.
----
Related:
Where's the DRY principle of Django here?
That transaction should look for the database alias used with the cursor, right?",,closed,Documentation,1.2,,fixed,"transaction, commit_unless_managed, raw sql, multiple databases, easy-pickings",toqueteos@… jasonkotenko,Accepted,1,0,0,0,,