﻿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@…	Jason Kotenko	"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@… Jason Kotenko	Accepted	1	0	0	0	0	0
