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 - DB-SIG@python.org http://mail.python.org/mailman/listinfo/db-sig