这可能很简单,但我无法到达那里......
如何在HTMLITE数据库中存储html代码?
我使用文本作为数据库中字段的数据类型(应该是blob ??)
我得到了奇怪的错误(并且使用相同的输入更改错误,所以我认为它与转义有关)
我的代码:
con = sqlite.connect(bd)
cur = con.cursor()
temp=cur.execute ('SELECT * from posts').fetchall()
#temp[Z][1] = ID
#temp[Z][4] = URL
i=0
while i< len (temp):
if temp[i][0]==None:
try:
html = urllib2.urlopen(str(temp[i][4])).read()
except:
html=None
#sql = 'UPDATE posts SET html = "' + str(html) + '" WHERE id = ' + str(temp[i][1])
#cur.execute( 'UPDATE posts SET html = ? WHERE id = ?' ,(html,temp[i][1]) )
cur.execute("UPDATE posts SET html = '" + str(html) + "' WHERE id = " + str(temp[i][1]))
con.commit()
print temp[i][4]
i=i+1
错误:
1 -
OperationalError:接近“2”:语法 错误警告:执行文件失败: Python 2.6.5 (r265:79063,2010年4月16日,13:09:56) 输入“版权”,“信用”或 “许可证”了解更多信息。
2-
ProgrammingError:你不能使用 除非你使用a,否则为8位字节串 text_factory可以解释8位 bytestrings(如text_factory = str)。 强烈建议您 而只是切换你的应用程序 到Unicode字符串。
P.S。我宁愿如果它是文本(人类可读)而不是blob,但如果它是更容易的方式,我就是为了它。
感谢名单
答案 0 :(得分:3)
尝试:
cur.execute(
"UPDATE posts SET html = ? WHERE id = ?", (html ,temp[i][1]))
使用参数化参数允许sqlite3为您转义引号。 (它还有助于防止SQL injection。)
关于ProgrammingError:html
应该是一个unicode对象,而不是string
对象。当你打开网址时:
response=urllib2.urlopen(str(temp[i][4]))
查看内容类型标题:
content_type=response.headers.getheader('Content-Type')
print(content_type)
可能会说像
'text/html; charset=utf-8'
在这种情况下,您应使用html
编解码器解码utf-8
字符串:
html = response.read().decode('utf-8')
这将使html
成为unicode对象,并(希望)解决ProgrammingError
。