2010-11-06 21 views
5

Je le code suivant pour insérer faire un insert dans ma base de données postgresqlpsycogp2 python insérer dans postgresql aide

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'])) 

Cependant quand je lance ce que je reçois l'erreur suivante:

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

Mais " concert "n'est pas une colonne c'est une valeur donc je ne comprends pas pourquoi je reçois cette erreur.

EDIT - J'ai essayé de mettre \ » autour du concert de valeur et essayé sans

Comment puis-je récupérer mes données insérées avec des obtenir cette erreur

Répondre

12

Vous avez vraiment, vraiment ne devrait pas utiliser la chaîne de python? mise en forme pour construire des requêtes - ils sont enclins à SQL injection Et votre problème réel est que vous utilisez "pour citer alors que vous devez utiliser" pour citer ("guillemets table/noms de colonnes etc," guillemets chaînes)

Utilisez le code suivant à la place:

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

Notez que vous devez utiliser %s, peu importe le type que vous avez réellement.

Voir aussi http://initd.org/psycopg/docs/usage.html#query-parameters.

+0

Merci, cela se débarrasse de cette erreur, mais maintenant je reçois exceptions.TypeError: int argument requis. Le seul des champs qui devrait être un int est catname et c'est un int. –

+0

Vous devez utiliser '% s' pour toutes les valeurs, même int. Je l'ai eu incorrect au début et ensuite édité ma réponse. Vous avez peut-être copié le code incorrect. – ThiefMaster