【发布时间】:2014-03-29 23:16:34
【问题描述】:
已经提出了很多与这个项目有关的问题,但是我遇到了太多麻烦,而且我试图弄清楚它已经白发了。
使用 Python 和 Scrapy 获取网络信息。 我可以使用以下代码将 3 个项目(Title、CriticalScore、UserScore)中的每一个都添加到数据库中:
cursor.execute("INSERT INTO ps3 (userscore) VALUES (%s)",[item['uscore']])
现在效果很好,它将它们置于上升的 ROWS 中,一切都很好。 但是,我需要将 Title、CriticalScore 和 UserScore 添加到同一行,当我尝试时,我得到了这个错误:
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, 'You have an error in your SQ
L syntax; check the manual that corresponds to your MySQL server version for the
right syntax to use near \'),("\'60\'",),("\'4.9\'",))\' at line 1')
我使用这行代码得到了这个错误:
cursor.execute("INSERT INTO ps3 (titles, criticalscore, userscore) VALUES (%s,%s,%s)",[item['title'],item['cscore'],item['uscore']])
我一直在 Stack Overflow Python 聊天中,不幸的是没有人能弄清楚。 如果有任何帮助,这就是我创建表格的方式:
cursor.execute('''CREATE TABLE ps3
(ID INT AUTO_INCREMENT PRIMARY KEY, Title text, CriticalScore text, UserScore text)''')
非常感谢您对此提供的任何帮助。
【问题讨论】:
-
尝试去掉单引号:
[item['title'].strip("'"),item['cscore'].strip("'"),item['uscore'].strip("'")]。看起来您在数据库中不需要它们。 -
可能标题中有单引号,需要将单引号转义2个单引号,如
item['title'].replace("'", "''") -
@AndyOHart 是的,这就是问题所在。您可能需要从列表中获取第 0 项,例如:
item['title'][0]。看起来这需要在scrapy spider的解析函数中完成。可能你有那个返回列表的extract()调用。您需要从中获取第 0 项。 -
item['title'],item['cscore'],item['uscore']看起来像什么?也可以试试... VALUES ('{}',{},{})'.format(item['title'].replace("'", "''"), item['cscore'], item['uscore'])。注意'{}';字符串应该在 sql commans 中引用 -
@behzad.nouri 好吧,严格来说,通过直接格式传递查询参数是个坏主意——在这种情况下参数不会被转义。