Re: problems with executing dynamically created queries.

Dave Cole <[email protected]> Fri, 23 Jul 2004 14:19:32 +1000
Newsgroups gmane.comp.python.sybase
Message-ID <[email protected]>
Erik Thiele wrote:
> hi.
> 
> i am using 
> 
> - gentoo linux.
> - sybase-0.36
> - freetds-0.62.3
> - python 2.3.3
> 
> from this linux machine i am accessing a mssql 7 server on an nt4.0 windows server.
> 
> i am doing
> 
> db=Sybase.connect('myserver','myuser','mypass','mydb')
> c=db.cursor()
> c.execute('select * from foo where something=@x', {'@x' : "blabla"})
> 
> it sais:
> 
> Sybase.DatabaseError: ------
> Must declare the variable '@x'
> 
> ??? i do not understand. why is this so?
> 
> i am trying to use python DB API 2.0. but i find the documentation for this
> not very sufficient. there seems to be no good example at all on the net.
> 
> questions never covered and done wrong in almost all examples is the issue
> with escaping the datatypes. some really do
> c.execute("select from where x="%s"" % mystring)
> this is of course fatal since mystring may contain closing " and then sql commands.
> 
> anyway... how do i get the module to work?

FreeTDS has historically had problems with named parameters.  Are you 
able to test the same query using the Perl bindings to FreeTDS?

> and... why is there several styles in DB API 2.0? i mean the Sybase.paramstyle
> thing. i thought DB API was there for portability, and then i find out
> that different modules have different ways to create sql queries. so there
> is absolute zero portability. why?

You will have to ask the database vendors that one.

- Dave

-- 
http://www.object-craft.com.au