如何在DB(SQLITE PYTHON)中存储HTML

如何在DB(SQLITE PYTHON)中存储HTML,python,html,database,sqlite,Python,Html,Database,Sqlite,这可能很简单,但我无法实现 如何在SQLITE数据库中存储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

这可能很简单,但我无法实现

如何在SQLITE数据库中存储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-

操作错误:接近2:语法 错误警告:执行文件失败: Python 2.6.5 r265:79063,2010年4月16日,13:09:56 输入版权、信用或 有关详细信息,请参阅许可证

2-

编程错误:您不能使用 除非使用 可解释8位字符的文本\u工厂 像text\u factory=str这样的bytestring。 强烈建议您 相反,只需切换应用程序即可 转换为Unicode字符串

顺便说一句,我宁愿它是人类可读的文本而不是blob,但如果这是更简单的方法,我完全赞成

Thanx

试试:

cur.execute(
    "UPDATE posts SET html = ? WHERE id = ?", (html ,temp[i][1]))
使用参数化参数允许sqlite3为您转义引号。它也有助于预防疾病

关于编程错误:html应该是unicode对象,而不是字符串对象。打开url时:

response=urllib2.urlopen(str(temp[i][4]))
查看内容类型标题:

content_type=response.headers.getheader('Content-Type')
print(content_type)
它可能会说

'text/html; charset=utf-8'
在这种情况下,应使用utf-8编解码器解码html字符串:

这将使html成为unicode对象,并有望解决编程错误

html = response.read().decode('utf-8')