如何在数据库中存储HTML(SQLITE PYTHON)

时间:2010-12-18 00:18:11

标签: python html database sqlite

这可能很简单,但我无法到达那里......

如何在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,但如果它是更容易的方式,我就是为了它。

感谢名单

1 个答案:

答案 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