gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:54 24 4
gpt4 key购买 nike

这可能很简单,但我做不到...

如何在 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 -

OperationalError: near "2": syntax error WARNING: Failure executing file: Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) Type "copyright", "credits" or "license" for more information.

2-

ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

附言我宁愿它是文本(人类可读)而不是 blob,但如果这是更简单的方法,我完全赞成。

谢谢

最佳答案

尝试:

cur.execute(
"UPDATE posts SET html = ? WHERE id = ?", (html ,temp[i][1]))

使用参数化参数允许 sqlite3 为您转义引号。 (它也有助于防止 SQL injection 。)

关于编程错误:html 应该是一个 unicode 对象,而不是一个 string 对象。当您打开网址时:

response=urllib2.urlopen(str(temp[i][4]))

查看内容类型 header :

content_type=response.headers.getheader('Content-Type')
print(content_type)

它可能会说类似的话

'text/html; charset=utf-8'

在这种情况下,您应该使用 utf-8 编解码器解码 html 字符串:

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

这将使 html 成为一个 unicode 对象,并(希望)解决 ProgrammingError

关于python - 如何将 HTML 存储在数据库中(SQLITE PYTHON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com