NameError 和不正确的绑定数量提供的 SQLite 代码

NameError and Incorrect number of bindings supplied SQLite code

我有一个临时 table u,它有两列,keyword 和 URL,以及实际的关键字和 URLs。我还有两个 table,一个包含每个关键字的 ID,另一个包含每个 URL 的 ID。我需要将关键字 ID 和 URL ID 从 u 中提取到我的永久 table URL_Keyword.

这是我目前所拥有的,但我意识到它不起作用,我不断得到:


tabU = cur.execute("SELECT * FROM u")
to_db=[( i['keyword'], i['URL']) for i in tabU]
cur.execute("INSERT INTO URL_Crawl_by_Keyword(Keyword_ID, URL_Crawl_ID) VALUES ((SELECT Keyword_ID FROM Keyword WHERE Keyword=?),(SELECT Unique_URL_ID FROM Unique_URL WHERE URL=?));", to_db))


ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 1500 supplied.

或:

cur.execute("INSERT INTO URL_Crawl_by_Keyword(Keyword_ID, URL_Crawl_ID) VALUES ((SELECT Keyword_ID FROM Keyword WHERE Keyword=?),(SELECT Unique_URL_ID FROM Unique_URL WHERE URL=?));",(Keyword_ID, URL_Crawl_ID))
NameError: name 'Keyword_ID' is not defined

您可以在一个 INSERT 语句中插入所有行,而不是遍历 SELECT 查询的结果。

您只需加入 table uKeywordUnique_URL:

sql = """
INSERT INTO URL_Crawl_by_Keyword(Keyword_ID, URL_Crawl_ID)
SELECT k.Keyword_ID, uu.Unique_URL_ID
FROM u
INNER JOIN Keyword k ON k.Keyword = u.Keyword
INNER JOIN Unique_URL uu ON uu.URL = u.URL;
"""
cur.execute(sql)