From: Dave C. <dj...@ob...> - 2003-02-20 17:53:22
|
> What is the current status regarding parameter passing with > freetds/MSSQL2000? I get an error if I try simple queries. > > import Sybase as dbapi > > con=dbapi.connect('cazalla','gotta','password','personal') > cur=con.cursor() > cur.execute('select * from usuarios where cd_usuario=@u', > {'@u':'marcos'}) > pprint.pprint(cur.fetchall()) > > This is what I get (line numbers are incorrect) > > Traceback (most recent call last): > File "etcPythonSybase.py", line 191, in ? > cur.execute('select * from usuarios where > cd_usuario=@u',{'@u':'marcos'}) > File "/usr/lib/python2.2/site-packages/Sybase.py", line 379, in > execute > self._raise_error(Error, 'ct_param') > File "/usr/lib/python2.2/site-packages/Sybase.py", line 309, in > _raise_error > raise exc(text) > Sybase.Error: ct_param I think it still has issues. :-) Looking at the FreeTDS 0.61 source for ct_param(): CS_RETCODE ct_param(CS_COMMAND * cmd, CS_DATAFMT * datafmt, CS_VOID * data, CS_INT datalen, CS_SMALLINT indicator) { TDSSOCKET *tds; TDSDYNAMIC *dyn; /* TDSINPUTPARAM param; */ tdsdump_log(TDS_DBG_FUNC, "%L inside ct_param()\n"); tdsdump_log(TDS_DBG_INFO1, "%L ct_param() data addr = %d data length = %d\n", data, datalen); tds = cmd->con->tds_socket; dyn = tds_lookup_dynamic(tds, cmd->dyn_id); /* TODO */ return CS_FAIL; /* dyn = tds->dyns[elem]; param = tds_add_input_param(dyn); param->column_type = _ct_get_server_type(datafmt->datatype); param->varaddr = data; if (datalen==CS_NULLTERM) { param->column_bindlen = 0; } else { param->column_bindlen = datalen; } param->is_null = indicator; return CS_SUCCEED; */ } Note that the code which would actually do something is commented out and the function unconditionally returns CS_FAIL. So for the being, you cannot pass parameters to Cursor.execute() or Cursor.callproc(), you must build a query string which does not use parameters. If I was really clever I would make Sybase.py adapt to the presense of FreeTDS and turn have it shield you from that limitation in FreeTDS. - Dave -- http://www.object-craft.com.au |