2010-11-06 8 views
5

Tengo el siguiente código para insertar hacer una inserción en mi base de datos PostgreSQLpsycogp2 pitón insertando en ayuda PostgreSQL

conn = psycopg2.connect("my connection setting are in here") 
cur = conn.cursor() 
cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%i, \"%s\", \"%s\", \"%s\")' % (1441, "concert", item['title'], item['artists'])) 

Sin embargo cuando funciono esto me sale el siguiente error:

psycopg2.ProgrammingError: column "concert" does not exist 
LINE 1: ...(location_id, catname, title, name) VALUES (1441, concert, "... 

Pero " concierto "no es una columna, es un valor así que no entiendo por qué estoy recibiendo este error".

EDITAR - He intentado poner \" ronda el concierto de valor y juzgado sin

¿Cómo puedo conseguir mis datos insertados sin conseguir este error

Respuesta

12

Realmente, realmente no debe usar cadena de Python? formateo para generar consultas: son propensas a SQL injection. Y su problema real es que utiliza "para cotizar mientras tiene que usar" para cotizar ("citas de nombres de tabla/columna, etc.", cadenas de comillas).

Utilice la código siguiente en su lugar:

cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%s, %s, %s, %s)', (1441, 'concert', item['title'], item['artists'])) 

Tenga en cuenta que debe usar %s sin importar el tipo que realmente tenga.

Ver también http://initd.org/psycopg/docs/usage.html#query-parameters.

+0

Gracias, eso se deshace de ese error pero ahora recibo excepciones.TypeError: int argument required. El único de los campos que debería ser un int es catname y es un int. –

+0

Debe usar '% s' para todos los valores, incluso el int. Lo he tenido al principio y luego he editado mi respuesta. Es posible que haya copiado el código incorrecto. – ThiefMaster