Python 操作错误:接近“;“声明”:语法错误
我使用python和sqlite3制作了一个简单的爬虫程序。但是cmd屏幕中有一些错误。所以我在stackoverflow.com上搜索了这种错误。但我找不到解决办法。一些问答建议我必须在sqlite命令上使用Python 操作错误:接近“;“声明”:语法错误,python,database,syntax,python-3.x,sqlite,Python,Database,Syntax,Python 3.x,Sqlite,我使用python和sqlite3制作了一个简单的爬虫程序。但是cmd屏幕中有一些错误。所以我在stackoverflow.com上搜索了这种错误。但我找不到解决办法。一些问答建议我必须在sqlite命令上使用?而不是%,比如SELECT COUNT(*)FROM url='%s'state=1”%url。但它不起作用 这里是错误 Traceback (most recent call last): File "C:\Python27\crawl.py", line 239, in (mod
?
而不是%
,比如SELECT COUNT(*)FROM url='%s'state=1”%url
。但它不起作用
这里是错误
Traceback (most recent call last):
File "C:\Python27\crawl.py", line 239, in (module)
parseArticle( u )
File "C:\Python27\crawl.py", line 146, in parseArticle
gaterNeighborInfo(soup)
File "C:\Python27\crawl.py", line 68, in gaterNeighborInfo
if url and url.startswith('http://') and db.isCrawledURL(url)<1:
File "C:\Python27\crawl.py", line 217, in isCrawledURL
self.cursor.execute("SELECT COUNT(*) FROM urls WHERE url='%s'state=1"%url)
OperationalError: near "state": syntax error
回溯(最近一次呼叫最后一次):
文件“C:\Python27\crawl.py”,第239行,在(模块)中
第条(u)
本文第146行的文件“C:\Python27\crawl.py”
gaterNeighborInfo(汤)
文件“C:\Python27\crawl.py”,第68行,在Gaternighborinfo中
如果url和url.startswith('http://')和db.isCrawledURL(url)则查询中的状态前缺少空格和and关键字。查询中的状态前缺少空格和and关键字。生成的SQL不正确;您可能需要url=…和state=1
(使用空格和和来匹配这两个标准
此外,不应使用字符串插值,而应使用SQL参数:
def isCrawledURL(self, url):
self.cursor.execute("SELECT COUNT(*) FROM urls WHERE url=? AND state=1", (url,))
ret = self.cursor.fetchone()
return ret[0]
这适用于所有查询,例如:
self.cursor.execute("INSERT INTO urls VALUES (?, ?)", (url,state))
以及:
请注意,参数被传递到游标中。execute()
调用作为第二个参数(一系列值)。您生成的SQL不正确;您可能需要一个url=…和state=1
(带有空格和和
)来匹配这两个条件
此外,不应使用字符串插值,而应使用SQL参数:
def isCrawledURL(self, url):
self.cursor.execute("SELECT COUNT(*) FROM urls WHERE url=? AND state=1", (url,))
ret = self.cursor.fetchone()
return ret[0]
这适用于所有查询,例如:
self.cursor.execute("INSERT INTO urls VALUES (?, ?)", (url,state))
以及:
请注意,参数作为第二个参数(一系列值)传递到游标中。execute()
调用。您的代码转储太大。您应该将代码示例修剪到重现问题所需的最小值。(我通常尝试从头开始构建一个测试用例,而不是裁剪应用程序的代码。)您的代码转储太大了。您应该将代码示例裁剪到重现问题所需的最小值。(我通常尝试从头构建一个测试用例,而不是裁剪我的应用程序代码。)