Excellent, thanks Ian. It works a treat, post updated. Tim.
> On Aug 19, 11:58 am, Tim Sawyer <list.dja...@calidris.co.uk> wrote: >> No, I don't think you're mistaken, especially if you want to use hints. >> >> I tried this code again today with the django database connection (using >> 1.2 final), and it didn't work. This only works with cx_Oracle >> connections. >> >> Seehttp://drumcoder.co.uk/blog/2010/apr/23/output-parameters-cx_oracle-a... > > There are several reasons why that snippet doesn't work: > > 1) Django cursors don't support passing in the bind parameters in a > dictionary. A sequence type is expected. > > 2) Django cursors use the '%s' syntax for placeholders, not the ':out' > syntax. > > 3) The oracle backend automatically trims a trailing semi-colon from > all queries, because its presence causes ordinary queries to fail. To > prevent it from being trimmed, add some whitespace after the semi- > colon, or add a trailing '/' as in sqlplus if you prefer. > > Correcting these three issues, the snippet works as expected in 1.2. > > On Aug 19, 12:14 pm, buddhasystem <potek...@bnl.gov> wrote: >> I'm 90% sure that you can't get the cx cursor out of Django connection. >> These are similar but different classes. I tried something like that. > > It works like this: > > from django.db import connection > django_cursor = connection.cursor() > cx_cursor = django_cursor.cursor > > This is internal API, so it could change in the future. > > On Aug 18, 2:58 pm, buddhasystem <potek...@bnl.gov> wrote: >> However, both "my" and yours solution suffer from the same defect imho >> -- >> that the ORM machinery of Django is unusable. We are back to manual >> mapping >> of rows onto objects... Or -- am I mistaken? > > The raw query mechanism will do the ORM mapping as long as you match > up the column names correctly when writing the query. The problem > with that is that you can't use cursor.var() directly, because you > don't have direct access to the particular cursor used to run the > query. > > There is some more internal API that may help with this. You can pass > in as a bind parameter an object that has a "bind_parameter" method > with the signature "def bind_parameter(self, cursor)". When the > statement is executed, the cursor will call that method, which is > expected to return the actual bind variable, and substitute the bind > variable for the object. > > For an example, have a look at the "InsertIdVar" class in django/db/ > backends/oracle/base.py, which is used within the "RETURNING INTO" > clause of an insert statement to receive the primary key of the > inserted object. > > Hope this helps, > Ian > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.