[英]upload web files to mysql in python
我是python的新手,正在尋找一種執行“復雜”任務的方法。
我需要將小的圖像(每個圖像小於1mb)存儲到數據庫的Image
列(blob)中。 我的腳本當前檢索讀取文件所需的URL。 到目前為止,我還沒有找到方法來檢索圖像並將其上載到DB,而無需將其寫入HDD(以保留HDD)。
我目前正在使用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)
希望有人能幫助我找到解決這個問題的方法。
PS:我知道在數據庫中存儲映像不是最佳解決方案,但是由於數據庫是跨設備同步的,並且某些數據庫可能需要脫機數據訪問,因此這些圖像需要存儲在該數據庫中。
在您的查詢中:
wquery = ("UPDATE `cin`.`flags` SET `flag`='%s', `update_time`='%d' WHERE `name`='%s' AND `lockid`='%s'") % (pic_bin, update_time, names[index], lockid)
基本上,您要做的是使用字符串格式系統從二進制文件創建字符串。 在那里,python嘗試將每個參數轉換為字符串(即str(pic_bin)
),然后用該字符串替換匹配的%s
。 您應該改用游標的系統:
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))
高溫超導
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.