From: <msa...@gr...> - 2004-01-03 04:52:09
|
In my company (medium sized, public administration oriented), we use it to access MS SQL Server from Linux. But we don't use parameters when using this modules. Peter Hansack wrote: > Sybase ASE uses parameters positional (in the order they are defined in > ct_param) - even named parameters. > > An example: > > ---------------------- > import Sybase > > db = Sybase.connect('SYBASE','sa','',database='data',auto_commit=1) > > db.execute('''create table test ( > key1 varchar(10) not null, > value1 varchar(10) null, > value2 varchar(10) null, > value3 varchar(10) null, > value4 varchar(10) null, > value5 varchar(10) null ) > ''') > > # 1 # > v = { '@key1' : 'key1', '@value1' : 'value1', '@value2' : 'value2', > '@value3' : 'value3', '@value4' : 'value4', '@value5' : 'value5'} > print "v=", v > > c = db.cursor() > > # 2 # > c.execute('insert into test values > (@key1,@value1,@value2,@value3,@value4,@value5)',v) > > # 3 # > c.execute('select * from test') > x = c.fetchone() > print "x=", x > > # 4 # > c.execute('''select * from test where key1=@key1 and value1=@value1 > and value2=@value2 and value3=@value3 and value4=@value4 > and value5=@value5''',v) > > y = c.fetchone() > print "y=", y > > c.close() > db.close() > ---------------------- > > > Running the example gives the following output: > > v= {'@key1': 'key1', '@value4': 'value4', '@value5': 'value5', '@value2': > 'value2', '@value3': 'value3', '@value1': 'value1'} > x= ('key1', 'value4', 'value5', 'value2', 'value3', 'value1') > y= ('key1', 'value4', 'value5', 'value2', 'value3', 'value1') > > > Conclusion: > # 3 # shows, that in insert the parameters are applied not in the order of # > 2 #, but in the order > shown in # 1 # (i.e in the incidental internal order of the dictionary) and > # 4 # shows, that this is > true also for where-clauses. > > > Consequence: a patch (for 0.36) > > # diff Sybase.py.original Sybase.py > 246a247,249 > >>import re >>re_params = re.compile(r'@\w+') >> > > 681c684,685 > < for name, value in params.items(): > --- > >> for name in re_params.findall(sql): >> value = params[name] > > > This helps only in cursor.execute(); the rest of the module should be > checked also. > > > Question: Is anybody using this module? > > > Regards, > |