2013-06-23 7 views
0

나는 파이썬에 처음 들어서 "복잡한"작업을 수행하는 방법을 찾고있다.파이썬에서 mysql에 웹 파일 업로드하기

내 DB의 Image 열 (blob)에 작은 이미지 (각각 1MB 미만)를 저장해야합니다. 내 스크립트는 현재 파일을 읽는 데 필요한 URL을 검색합니다. 나는 HDD를 쓰지 않고 (HDD를 보충하기 위해) 지금까지 이미지를 검색하고 DB에 업로드 할 방법이 없다는 것을 발견했다.

현재 URLlib2와 MySQL Connector를 사용하고 있으며 Windows와 Debian 모두에서 작동하므로 가능한 한 계속 사용하고 싶습니다.

codes = [xx, aa, ab] # This line is simulated as it is gerated by a long script run previously... 

print "-> Downloading Flags..." 
for code in codes: 
    if not code == 'xx': 
     filename = "%s-lgflag.gif" % code 
     url = "%s%s" % (flagurl, filename) 
     index = code.index(code) 

     opener = urllib2.build_opener() 
     opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
     infile = opener.open(url) 
     pic = infile.read() 

     update_time = int(time.time()) 

     wquery = ("UPDATE `cin`.`flags` SET `flag`='%s', `update_time`='%d' WHERE `name`='%s' AND `lockid`='%s'") % (pic_bin, update_time, names[index], lockid) 
     cursor.execute(wquery) 
     cnx.commit() 
     sys.exit() ### Exit to make sure that I don't pass the whole list of 500+ flags 
print "-> Flags downloaded" 

이 코드 반환 오류 :

Traceback (most recent call last): 
    File "C:\Users\***\flagstest.py", line 61, in <module> 
    wquery = ("UPDATE `cin`.`flags` SET `flag`='%s', `update_time`='%d' WHERE `name`='%s' AND `lockid`='%s'") % (pic, update_time, names[index], lockid) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc1 in position 41: ordinal not in range(128) 

는 희망의 사람이 내가 그것을를 arround 작동 할 수있는 방법을 찾을 수 있습니다 ...

PS : 나는 DB에 이미지를 저장 알고 최선 아니다 솔루션이지만 DB가 여러 기기에서 동기화되고 오프라인 데이터 액세스가 필요할 수 있으므로 이러한 이미지를 저장해야합니다. 귀하의 요청에

답변

0

:

wquery = ("UPDATE `cin`.`flags` SET `flag`='%s', `update_time`='%d' WHERE `name`='%s' AND `lockid`='%s'") % (pic_bin, update_time, names[index], lockid) 

당신이 무엇을, 기본적으로 문자열 형식 시스템을 사용하여 이진에서 문자열을 만드는 것입니다. 거기에서 파이썬은 각 인수를 문자열 (즉, str(pic_bin))로 변환 한 다음 문자열에 일치하는 %s을 해당 문자열로 바꿉니다. HTH에게

wquery = "UPDATE `cin`.`flags` SET `flag`='%s', `update_time`='%d' WHERE `name`='%s' AND `lockid`='%s'" 
cursor.execute(wquery, (pic_bin, update_time, names[index], lockid)) 

다른 questions like yours

에서보세요 나는 변수가 올바른 방법으로 사용되지하지만 이상 찾을 수 없습니다 것을 이해

+0

감사 : 대신 커서의 시스템을 사용해야합니다 Google ...하지만 여전히이 오류가 발생합니다 : Traceback (가장 최근의 마지막 통화) : 파일 "C : \ Users ... \ Xflags.py", 61 행 커서 .execute (wicery, (pic_bin, update_time, names [index], lockid,)) 파일 "C : \ Python27 \ lib \ site-packages \ mysql \ connector \ cursor.py ", 줄 381, 실행 "문자열 서식 지정 중 잘못된 인수 수 " 프로그래밍 오류 : 문자열 서식 지정 중 잘못된 인수 수 – Xop777

관련 문제