Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 操作错误:接近“;“声明”:语法错误_Python_Database_Syntax_Python 3.x_Sqlite - Fatal编程技术网

Python 操作错误:接近“;“声明”:语法错误

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

我使用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 (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()
调用。

您的代码转储太大。您应该将代码示例修剪到重现问题所需的最小值。(我通常尝试从头开始构建一个测试用例,而不是裁剪应用程序的代码。)您的代码转储太大了。您应该将代码示例裁剪到重现问题所需的最小值。(我通常尝试从头构建一个测试用例,而不是裁剪我的应用程序代码。)