Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MySQLdb Python insert %d and %s

Precursor:

MySQL Table created via: CREATE TABLE table(Id INT PRIMARY KEY NOT NULL, Param1 VARCHAR(50)) 

Function:

.execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 

Output:

TypeError: %d format: a number is required, not a str 

I'm not sure what's going on here or why I am not able to execute the command. This is using MySQLdb in Python. .execute is performed on a cursor object.

EDIT:

The question: Python MySQLdb issues (TypeError: %d format: a number is required, not str) says that you must use %s for all fields. Why might this be? Why does this command work?

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string) 
like image 692
Matt Stokes Avatar asked Dec 09 '13 04:12

Matt Stokes


2 Answers

As the whole query needs to be in a string format while execution of query so %s should be used...

After query is executed integer value is retained.

So your line should be.

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string)) 

Explanation is here

like image 69
xor Avatar answered Oct 08 '22 20:10

xor


The format string is not really a normal Python format string. You must always use %s for all fields

like image 24
lwzhuo Avatar answered Oct 08 '22 19:10

lwzhuo