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.
--
_______________________________________________
DB-SIG maillist - [email protected]
http://mail.python.org/mailman/listinfo/db-sig