Lacrima schrieb:
Hello!

I use sqlite3 module for my sqlite database. I am trying to substitute
table name in sql query.

import sqlite3
con = sqlite3.connect('mydb')
cur = con.execute("select * from table where name='Joe'")
That's ok

cur = con.execute("select * from table where name=?", ('Joe',))
That's ok too

cur = con.execute("select * from ? where name=?", ('table', 'Joe'))
Traceback (most recent call last):
  File "<string>", line 1, in <fragment>
sqlite3.OperationalError: near "?": syntax error

So what's wrong now?
Is it impossible to substitute table names, using DB API?

Yes, it is. How should the api discern that you meant the tabe-name (which gets passed without quotes, or if so with double-quotes) instead of a string-literal? There *could* be means to do so, but in the end all this boils down to crossing a border that better is left alone - because there are many problems of sql injection lurking if you are basing your tablenames/columns on *input*.

If so, what is a way to make table name substitutions? Are string
operations like
'select * from %s where...' % tablename
ok in this case?

By substituting it with simple string-interpolation. Or even better, by not doing it at all - because usually, your datamodel is tied to your program, so the need for this kind of dynamicity shouldn't arise in the first place.

Die
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to