sqlite3操作错误: "Where"附近:语法错误(Python 2,sqlite3)

2024-10-01 11:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法克服以下错误:

Traceback (most recent call last):
  File "datascraper.py", line 352, in <module>
    URL))
sqlite3.OperationalError: near "WHERE": syntax error

它来自以下代码(第352行标记):

^{pr2}$

作为参考,Python中封装的SQL命令应该如下所示:

INSERT INTO someSQLtable (providername, providerlink) 
    VALUES ('somestring', 'http://www.someurl.com/stuff/') 
    WHERE NOT EXISTS (
         SELECT * FROM someSQLtable 
         WHERE someSQLtable.providerlink = 'http://www.someurl.com/stuff/')

我的目标是通过检查新检索到的表链接(它是唯一的)来检查表是否已经包含有问题的条目,如果表中还没有链接,就写到表中。在

使用空格显示第352行的最后一个URL出现异常。在

我已经尝试过将输入修改为另一个字符串,看看是否有效,更改代码以使用Python的stringops(恐怖!)喝一杯。到目前为止似乎什么都没用。在


Tags: 代码comhttpurlmost链接www错误
2条回答

也许这与iSQLLite不同,但通常不能在values语句中使用where子句。尝试类似于:

INSERT INTO someSQLtable (providername, providerlink) 
SELECT 'somestring', 'http://www.someurl.com/stuff/'
FROM ( values (1) ) as T 
WHERE NOT EXISTS (
     SELECT * FROM someSQLtable 
     WHERE someSQLtable.providerlink = 'http://www.someurl.com/stuff/') 

如果不支持(values(1))as T,那么可能有类似于oraclesdual或DB2的sysibm.sysdummy1在

INSERT语句没有WHERE子句。在

如果您在providerLink列上有一个唯一约束(如果没有,您应该创建一个),您可以简单地使用INSERT OR IGNORE

INSERT OR IGNORE INTO someSQLtable(providername, providerlink)
    VALUES ('somestring', 'http://www.someurl.com/stuff/')

否则,必须用查询替换VALUES子句:

^{pr2}$

相关问题 更多 >