Here's an example of a problem that I have with a MySQL database and 
escaping of executesql placeholders.
I am using web2py 1.99.7 on Ubuntu with Python2.5

testDAL works, but testDB throws this error:

<class 'gluon.contrib.pymysql.err.ProgrammingError'> (1064, u"You have an 
error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '1\\'')' at line 1")

Is there some additional escaping that I need to do for testDB ?

Thanks,
Chris Guest


SQL:
CREATE TABLE `test1` (   `ID` int(11) NOT NULL auto_increment,   `Text` 
varchar(5000) default NULL,   PRIMARY KEY  (`ID`) ) ENGINE=InnoDB;

model:

db.define_table(
    'test1',
    Field('Text', 'string'),
    )


controller:

textStr = '1' 

def testDB():
    reprTextStr = repr(textStr)
    test1 = db.executesql("insert into test1 (t1) VALUES (%s)", 
placeholders =(reprTextStr,))
    return dict(success=1)
    
def testDAL():
    reprTextStr = repr(textStr)
    test1 = db.test1.insert(Text=reprTextStr)
    test1_id = db._adapter.lastrowid('test1')
    return dict(test1_id=test1_id)


SELECT * FROM test1
    -> ;
+----+----------+
| ID | Text     |
+----+----------+
|  2 | '1'      | 
|  3 | '1'      | 
|  4 | '1'      | 
+----+----------+


-- 



Reply via email to