Fixed docs: the execute argument must be a sequence, not a tuple.

This commit is contained in:
Daniele Varrazzo 2010-11-19 13:13:14 +00:00
parent 21dfc2c592
commit f2c5d04f39
2 changed files with 4 additions and 2 deletions

View File

@ -63,7 +63,7 @@ I can't pass an integer or a float parameter to my query: it says *a number is r
>>> cur.execute("INSERT INTO numbers VALUES (%s)", (42,)) # correct >>> cur.execute("INSERT INTO numbers VALUES (%s)", (42,)) # correct
I try to execute a query but it fails with the error *not all arguments converted during string formatting* (or *object does not support indexing*). Why? I try to execute a query but it fails with the error *not all arguments converted during string formatting* (or *object does not support indexing*). Why?
Psycopg always require positional arguments to be passed as a tuple, even Psycopg always require positional arguments to be passed as a sequence, even
when the query takes a single parameter. And remember that to make a when the query takes a single parameter. And remember that to make a
single item tuple in Python you need a comma! See :ref:`query-parameters`. single item tuple in Python you need a comma! See :ref:`query-parameters`.
:: ::
@ -71,6 +71,7 @@ I try to execute a query but it fails with the error *not all arguments converte
>>> cur.execute("INSERT INTO foo VALUES (%s)", "bar") # WRONG >>> cur.execute("INSERT INTO foo VALUES (%s)", "bar") # WRONG
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar")) # WRONG >>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar")) # WRONG
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct >>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct
>>> cur.execute("INSERT INTO foo VALUES (%s)", ["bar"]) # correct
My database is Unicode, but I receive all the strings as UTF-8 `str`. Can I receive `unicode` objects instead? My database is Unicode, but I receive all the strings as UTF-8 `str`. Can I receive `unicode` objects instead?
The following magic formula will do the trick:: The following magic formula will do the trick::

View File

@ -118,12 +118,13 @@ query:
>>> cur.execute("INSERT INTO numbers VALUES (%s)", (42,)) # correct >>> cur.execute("INSERT INTO numbers VALUES (%s)", (42,)) # correct
- For positional variables binding, *the second argument must always be a - For positional variables binding, *the second argument must always be a
tuple*, even if it contains a single variable. And remember that Python sequence*, even if it contains a single variable. And remember that Python
requires a comma to create a single element tuple:: requires a comma to create a single element tuple::
>>> cur.execute("INSERT INTO foo VALUES (%s)", "bar") # WRONG >>> cur.execute("INSERT INTO foo VALUES (%s)", "bar") # WRONG
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar")) # WRONG >>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar")) # WRONG
>>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct >>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct
>>> cur.execute("INSERT INTO foo VALUES (%s)", ["bar"]) # correct
- Only variable values should be bound via this method: it shouldn't be used - Only variable values should be bound via this method: it shouldn't be used
to set table or field names. For these elements, ordinary string formatting to set table or field names. For these elements, ordinary string formatting