[DB-SIG] mysql string length?

engelbert.gruber at ssg.co.at engelbert.gruber at ssg.co.at
Mon Apr 17 14:56:11 CEST 2006


On Mon, 17 Apr 2006, Andy Todd wrote:

>>>>>> stmt = "INSERT INTO table_x (body) VALUES (%s)" # [1]
>>>>>> cursor.execute(stmt, (body,))
>>> [1] note that there are no quote marks around the %s
>> 
>> this works here (debian testing, python 2.3.5, 4.0.21) ::
>> 
>> import MySQLdb
>> """
>> create table table_x (
>>    id int auto_increment primary key,
>>    body text
>>    )
>> """
>> db = MySQLdb.connect(passwd="",db="test")
>> c = db.cursor()
>> body = "0....5...."*28
>> sql = "INSERT INTO table_x (body) VALUES('%s')"
>> c.execute( sql % (body))
>> c.execute("select body from table_x")
>> for row in c.fetchall():
>>      print len(row[0])
>> 
>> i wont bet on fetching 1Mb.
>> 
>> cheers
>
> You've just repeated the original poster's code. As I suggested the problem 
> is that he's using string substitution when he should be using parameter 
> substitution. In these cases %s means two completely different things.

yes but it works here, even with ``body = "0....5...."*280`` so i cannot 
blame it on not using 'paramstyle', or what ?

> Please read the sections on 'paramstyle' and the cursor '.execute' method in 
> the DB-API 2.0 definition [1].

of course you are right it is ::

   c.execute("INSERT INTO table_x (body) VALUES('%s')"% (body))

or paramstyle without quotes ::

   c.execute(INSERT INTO table_x (body) VALUES(%s)", (body))

but both work here with bodylength up to 65535 bytes not 255.

sorry for dupplication, but i fail to see the point.


-- 


More information about the DB-SIG mailing list