dennisearlev...@gmail.com wrote: > > Hi, > > Sorry about the simple question but I am very new to Python. > > Anyway, I have a function that will be used to call a stored procedure > and I need to format the string with the correct number of parameter > markers for the ODBC driver, fairly standard stuff. > > What I have works but looks ugly, is there a better way to build or > concatenate a string or is a list or a tuple a better option? > > the function looks like this > > def callSp(self, schema, spName) : > sqlCode = "{call " + schema + "." + spName + "(" > par_Markers = "" > y = len(self.param) > x = 0 > while x < y : > par_Markers = par_Markers.join("?") > if (x < y - 1) : > par_Markers = par_Markers.join(", ") > x += 1 > self.cmdText = sqlCode + par_Markers + ")}" > self.ExecuteCursor() > > return > > self.param is a list of parameters. sself.cmdText is the text that will > be used to call the stored procedure. > > the function would be called like this > > class.AddParameter(some value 1) > class.AddParameter(some value 2) > callSp("schemaName", "storedProcedureName") > > the self.cmdText will look like this just before the ExecuteCursor call > > "{call schemaName.StoredProcedureName(?, ?)}" > > the code works, but as I said is a bit ugly, is there better methods?
If I understand you correctly you have two problems. (1) build a string from a few parts. You can use string formatting for that: >>> "It's a {size} {animal}".format(size="big", animal="bird") "It's a big bird" You can escape { and } by repeating them: >>> "{{It's a {size} {animal}}}".format(size="big", animal="bird") "{It's a big bird}" (2) Build a string containing a comma-separated list with a varying number of question marks. That's easy with str.join(): >>> ", ".join(7*"?") '?, ?, ?, ?, ?, ?, ?' The complete method may become def callSp(self, schema, spName) : qm = ", ".join("?"*len(self.param)) self.cmdText = "{{call {schema}.{procname} ({qm})}}".format( schema=schema, procname=spName, qm=qm) self.ExecuteCursor() ... but please consider adopting the conventions recommended in the style guide http://legacy.python.org/dev/peps/pep-0008/ before you write a significant amount of Python code. -- https://mail.python.org/mailman/listinfo/python-list