By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,876 Members | 1,200 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,876 IT Pros & Developers. It's quick & easy.

Strings and % sign fails - Help Please

P: n/a
I also posted this in Django Users group, but figured it probably has
more relevance for python group.

It seems like a freak problem to me. I spent a long hour to track the
problem down and here it is:

The following statement fails because it has the '%' sign in it.
cursor.execute("select '%'")

The error is: IndexError: list index out of range

How do I address this problem?

Please note that the following work just fine:
cursor.execute("select 'x'")

and the following also fails with the same error:
cursor.execute("""select '%'""")
cursor.execute("select '\%'")

astr = "select '\%'"
cursor.execute(astr)

I greatly appreciate all helps,
Regards,
Sia

Mar 24 '06 #1
Share this Question
Share on Google+
10 Replies


P: n/a
si*********@gmail.com writes:
The following statement fails because it has the '%' sign in it.
cursor.execute("select '%'")

The error is: IndexError: list index out of range

How do I address this problem?


Use "%%".
--
Jorge Godoy <go***@ieee.org>

"Quidquid latine dictum sit, altum sonatur."
- Qualquer coisa dita em latim soa profundo.
- Anything said in Latin sounds smart.
Mar 24 '06 #2

P: n/a
heh.. It works except I am using psycopg.Binary(somebinarystructure),
and I am not really doing it by hand to just add the extra %, and
psycopg.Binary doesn't do it. I'd imagine it's a bug with psycopg
package. Any quick way to project a string from freak '%' problems?

Thanks,
Sia
Jorge Godoy wrote:
si*********@gmail.com writes:
The following statement fails because it has the '%' sign in it.
cursor.execute("select '%'")

The error is: IndexError: list index out of range

How do I address this problem?


Use "%%".
--
Jorge Godoy <go***@ieee.org>

"Quidquid latine dictum sit, altum sonatur."
- Qualquer coisa dita em latim soa profundo.
- Anything said in Latin sounds smart.


Mar 24 '06 #3

P: n/a
si*********@gmail.com writes:
heh.. It works except I am using psycopg.Binary(somebinarystructure),
and I am not really doing it by hand to just add the extra %, and
psycopg.Binary doesn't do it. I'd imagine it's a bug with psycopg
package. Any quick way to project a string from freak '%' problems?


Try using r"string '%'"...

--
Jorge Godoy <go***@ieee.org>

"Quidquid latine dictum sit, altum sonatur."
- Qualquer coisa dita em latim soa profundo.
- Anything said in Latin sounds smart.
Mar 24 '06 #4

P: n/a
Jorge Godoy wrote:
si*********@gmail.com writes:
heh.. It works except I am using psycopg.Binary(somebinarystructure),
and I am not really doing it by hand to just add the extra %, and
psycopg.Binary doesn't do it. I'd imagine it's a bug with psycopg
package. Any quick way to project a string from freak '%' problems?


Try using r"string '%'"...


Raw strings don't have anything to do with format specifiers.

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
If the sky should fall, hold up your hands.
-- (a Spanish proverb)
Mar 24 '06 #5

P: n/a
Erik Max Francis <ma*@alcyone.com> writes:
Raw strings don't have anything to do with format specifiers.


I know. I'm just trying to see if there might be some magic going on with his
driver...

--
Jorge Godoy <go***@ieee.org>

"Quidquid latine dictum sit, altum sonatur."
- Qualquer coisa dita em latim soa profundo.
- Anything said in Latin sounds smart.
Mar 24 '06 #6

P: n/a
Jorge Godoy wrote:
I know. I'm just trying to see if there might be some magic going on with his
driver...


Since raw strings have no effect on format specifiers, that won't tell
you anything.
r'%' == '%'

True

His problem is that cursor.execute does format expansion with %, so a
single % is not legal.

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
We are victims of our circumstance.
-- Sade Adu
Mar 24 '06 #7

P: n/a
Erik Max Francis wrote:
His problem is that cursor.execute does format expansion with %, so a
single % is not legal.


Yes, I think psycopg uses paramstyle='pyformat', i.e. it expands
parameters in your sql in the usual Python way where % has a special
meaning. If you really mean the % sign only, use %%.

-- Christoph
Mar 24 '06 #8

P: n/a
si*********@gmail.com wrote:
heh.. It works except I am using psycopg.Binary(somebinarystructure),
and I am not really doing it by hand to just add the extra %, and
psycopg.Binary doesn't do it. I'd imagine it's a bug with psycopg
package.


or a bug in your use of Binary. what exactly are you applying Binary
to, and how do you pass the resulting adapter to execute ?

</F>

Mar 24 '06 #9

P: n/a
Problem Solved. The problem was with psycopg.Binary whose mere job is
to convert bytes into clear text for sql statement. I'll be filing a
bug.

Thanks everyone,
Sia

Mar 24 '06 #10

P: n/a
Siah wrote:
Problem Solved. The problem was with psycopg.Binary whose mere job is
to convert bytes into clear text for sql statement.


no, its job is to wrap strings that contain binary blobs, so that data binding
works properly. you're supposed to do

cursor.execute(statement, Binary(data))

and not

cursor.execute(Binary(statement))

or

cursor.execute("some statement %s" % Binary(statement))

or some other sillyness. it's an object wrapper, not an escape function for
arbitrary SQL. Python's not PHP.

for more details, see "Type Objects and Constructors" on this page

http://www.python.org/dev/peps/pep-0249/

</F>

Mar 24 '06 #11

This discussion thread is closed

Replies have been disabled for this discussion.