2014-02-27 5 views
2

파이썬의 psycopg2 executemany() 함수로 여러 값을 postgres 테이블에 삽입하는 데 문제가 있습니다.dict 값을 postgresql 테이블에 삽입하려고 시도 할 때 오류가 발생했습니다.

{u'city': u'14000', u'sitename': u'12298', u'longitude': u'-9767764.18643674', u'county': u'17031', u'sourceid': u'42', u'state': u'17', u'latitude': u'5147311.10876352', u'csrfmiddlewaretoken': u'WY7EBHl55TuWSwXv4C3vNa5X5d0peJyv', u'sourcesiteid': u'42' } 

나는 다음과 같은 코드를 삽입을 시도하고있다 :

try: 
    con = psycopg2.connect(db_connect) 
    cur = con.cursor() 

    cur.executemany("""INSERT INTO cacw_sites(sourceid,sitename,sourcesiteid,state,county,city,schooldistrict,zipcode,neighborhood,latitude,longitude) 
         VALUES (%(sourceid)s, %(sitename)s, %(sourcesiteid)s, %(state)s, %(county)s, %(city)s, %(zipcode)s, %(neighborhood)s, 
           %(latitude)s, %(longitude)s)""", dict) 
    con.commit() 
except psycopg2.DatabaseError, e: 
    print 'There was a problem updating the sites: %s'%e 

finally: 
    if con: 
     con.close() 

그러나, 나는 오류가 발생 계속 : 나는 다음과 같은 값으로 딕셔너리를 형식 오류 : 문자열 인덱스는 정수 여야합니다

나는 어떻게 든 다른 문자열로 문자열을 참조하려고하지만 실제로 어디 있는지 모르겠습니다. 내가

dict['state'] 

내가
u'17' 

의 적절한 출력을받을 할 경우 어떻게 내가 올바르게이 값을 삽입 할 수없는 것 와서? 도움을 주셔서 감사합니다.

+0

try :'cur.executemany (..., [dict])'. 'executemany'는 목록이나 dicts의 목록을 기대합니다. – isedev

답변

1

귀하는 시퀀스 사전을 기대하지만 을 사용하고 있지만 사전 만 제공하십시오.

사용 : 대신

cur.execute(
    """INSERT INTO cacw_sites(sourceid,sitename,sourcesiteid,state,county,city,schooldistrict,zipcode,neighborhood,latitude,longitude) 
     VALUES (%(sourceid)s, %(sitename)s, %(sourcesiteid)s, %(state)s, %(county)s, %(city)s, %(zipcode)s, %(neighborhood)s, 
       %(latitude)s, %(longitude)s)""", dict) 

.

대신 데이터베이스 어댑터가 키 (각 문자열)를 생성하는 사전 객체를 반복하고 그 문자열에서 매개 변수를 찾으려고합니다. 당신은 그런 식으로 'sourceid'['sourceid']의 동등한 일을하려고하는 결국.

관련 문제