2014-07-07 4 views
0

이전에 게시했지만 여전히 문제가 있습니다. 스크립트에서이 항목을 저장하면 문제가되는 데이터베이스에 잘못된 결과가 표시됩니다. "Ánimo Inglewood Charter High School"에서는 대신 "xc3x81nimo Inglewood Charter High School"을 표시합니다. 내가 콘솔에 값을 인쇄하고 제대로 보여줍니다.파이썬 스크립트에서 mysql 인코딩 문제가 발생했습니다.

import schoolslib, MySQLdb 

cities = schoolslib.getcitylist("ca") 

for city in cities: 
schools = schoolslib.getschoolstest(city) 
data = ['gsId', 'name', 'type', 'gradeRange', 'enrollment', 'gsRating', 'parentRating', 'city', 'state', 'districtId', 'district', 'districtNCESId', 'address', 'phone', 'fax', 'website', 'ncesId', 'lat', 'lon', 'overviewLink', 'ratingsLink', 'reviewsLink', 'schoolStatsLink'] 
db = MySQLdb.connect(host="localhost", user="schools", passwd="", db="schoolinfo", charset = "utf8", use_unicode =True) 
cursor = db.cursor() 
schooldata = [0]*23 
for school in schools.iter('school'): 
    for x in range(0, 23): 
     schooldata[x] = school.find(data[x]) 
     if (schooldata[x] == None) or (schooldata[x].text == None) : 
      schooldata[x] = "" 
     else: 
      schooldata[x] = schooldata[x].text 
      schooldata[x] = schooldata[x].encode('utf8', "ignore") 
      print schooldata[x] 

    cursor.execute("INSERT INTO school (gsId,name,type,gradeRange,enrollment,gsRating,parentRating,city,state,districtId,district,districtNCESId,address,phone,fax,website,ncesId,lat,lon,overviewLink,ratingsLink,reviewsLink,schoolStatsLink) VALUES %r;" % (tuple(schooldata),)) 
db.commit() 

답변

0

? 자리 표시자를 사용하여 데이터베이스에 값을 전달하고, 당신을 위해 execute 인용을 값을 수 있도록 : 여기 MySQL 데이터베이스에서 데이터 정렬 utf8_unicode_ci를 사용하고 나의 코드입니다. Python의 % 또는 str.format 함수를 사용하지 마십시오. Python은 데이터베이스 커서만큼 똑똑하지 않기 때문입니다.

cursor.execute("update employee set manager=? where empid=?", (mgrid,empid)) 

(이 update을 보여 주지만, insert 같은 스타일을 사용합니다.)

관련 문제