I have been trying out New Relic and have found that any queries that 
include '%' are breaking.

This is what Graham at New Relic advised:


  As far as I can tell:

ILIKE '%|featured|%'

would cause a problem because the mogrify() function in psycopg2 cursor 
which does variable substitution doesn't care about quoted values and will 
try and do a % substitution where ever it sees one. The only time it will 
not is when is actually %% meaning a single escaped %, which it would then 
replace with just a single %.

So right now to me looks like Web2Py is generating incorrect SQL.

In general it is regarded as best practice to never do full SQL 
construction yourself and to always rely on DBAPI module to do variable 
text interpolation and Web2Py isn't doing that.


The errors I get look like this:


Traceback (most recent call last):
  File "/opt/web2py/gluon/restricted.py", line 204, in restricted
    exec ccode in environment
  File "/opt/web2py/applications/init/controllers/default.py" 
<https://test.pricetack.com/admin/edit/init/controllers/default.py>, line 129, 
in <module>
  File "/opt/web2py/gluon/globals.py", line 162, in <lambda>
    self._caller = lambda f: f()
  File "/opt/web2py/applications/init/controllers/default.py" 
<https://test.pricetack.com/admin/edit/init/controllers/default.py>, line 20, 
in home
    (db.auth_user.id==db.item.seller)).select(limitby=(0,4), orderby='<random>')
  File "/opt/web2py/gluon/dal.py", line 5825, in select
    return self.db._adapter.select(self.query,fields,attributes)
  File "/opt/web2py/gluon/dal.py", line 1275, in select
    rows = response(sql)
  File "/opt/web2py/gluon/dal.py", line 1265, in response
    self.execute(sql)
  File "/opt/web2py/gluon/dal.py", line 1351, in execute
    return self.log_execute(*a, **b)
  File "/opt/web2py/gluon/dal.py", line 1345, in log_execute
    ret = self.cursor.execute(*a, **b)
  File 
"/usr/local/lib/python2.6/dist-packages/newrelic-1.0.5.156-py2.6.egg/newrelic/hooks/database_dbapi2.py",
 line 38, in execute
    return self._nr_cursor.execute(sql, parameters)
IndexError: tuple index out of range


*File 
/usr/local/lib/python2.6/dist-packages/newrelic-1.0.5.156-py2.6.egg/newrelic/hooks/database_dbapi2.py
 
in execute at line 38* code argumentsvariables
Function argument list

(self=<newrelic.hooks.database_dbapi2.CursorWrapper object>, sql='SELECT 
item.id, item.title, item.seller, item.s...item.seller)) ORDER BY RANDOM() 
LIMIT 4 OFFSET 0;', parameters=())
Code listing

33.
34.
35.
36.
37.
38.

39.
40.
41.
42.

            transaction = newrelic.api.transaction.transaction()
            if not transaction:
                return self._nr_cursor.execute(sql, parameters)
            with newrelic.api.database_trace.DatabaseTrace(
                    transaction, sql, module):
                return self._nr_cursor.execute(sql, parameters)


        def executemany(self, sql, seq_of_parameters=[]):
            transaction = newrelic.api.transaction.transaction()
            if not transaction:

Variablesself._nr_cursor.execute<built-in method execute of 
psycopg2._psycopg.cursor 
object>self<newrelic.hooks.database_dbapi2.CursorWrapper 
object>self._nr_cursor<cursor object at 0x29ffc18; closed: 
0>parameters()sql'SELECT 
item.id, item.title, item.seller, item.s...item.seller)) ORDER BY RANDOM() 
LIMIT 4 OFFSET 0;'

  

Reply via email to