2010-11-06 20 views
5

ben aşağıdaki hatayı alıyorum bu çalıştırdığınızda benpiton psycogp2

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

Ancak benim postgresql veritabanına bir ekleme yapmak eklemek için aşağıdaki kodu vardır: "

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

Ama konser "bir sütun değil, bu yüzden bu hatayı alıyorum neden anlamıyorum.

DÜZENLEME - Ben değer konseri yuvarlak "\ koyarak çalıştı ve

olmadan çalıştık

benim veri üzerinden bu hatayı alıyorum ile eklenen ben alabilirim nasıl

cevap

12

Gerçekten, gerçekten piton dizesini kullanmamalıdır? Sorguları oluşturmak için biçimlendirme - onlar SQL injection eğilimlidir. Ve asıl sorun, "alıntı yapmak için kullanmak zorunda olduğunuzda" alıntı yapmak için kullandığınız "(tırnaklar tablo/sütun adları vb" tırnak dizeleri)

aşağıdaki kodu yerine koyar:

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

Gerçekte hangi tür olursa olsun, %s kullanmanız gerektiğini unutmayın.

Ayrıca bkz. http://initd.org/psycopg/docs/usage.html#query-parameters.

+0

Teşekkürler, bu hatadan kurtuluyor ama şimdi istisnalar alıyorum.TypeError: int argümanı gerekiyor. Int olması gereken alanlardan sadece biri catname ve bir int. –

+0

Tüm değerler için '% s' 'i kullanmalısınız. Başta yanlış yaptım ve sonra cevabımı düzenledim. Yanlış kodu kopyalamış olabilirsiniz. – ThiefMaster