2010-03-05 37 views
6

編輯索引:TL; DR版本OperationalError創建SQLite中

我打這個

CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE table_name (file_size); 

,而不是這個

CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE ON table_name (file_size); 

不要那樣做。

+0

-1:代碼太多。你能把這個簡化成只顯示問題的代碼嗎?顯示錯誤的最小SQL?然後用簡短的點到點代碼樣本替換looooong代碼樣本? – 2010-03-05 11:06:42

+1

減去錯誤處理和sql,那裏有14行代碼。我花了一個小時將代碼縮短到這一點,這是我能夠得到的最小的代碼,但仍然出現錯誤。 – 2010-03-05 13:04:05

+0

@Nathan Spears:勇敢的,但問題仍然很大。什麼是「testIndexes」代碼?所有這些「verifyIndexes」代碼?你真的可以減少你在這裏發佈的代碼的數量,以便最小化地顯示問題。 – 2010-03-05 15:48:25

回答

5

一些無聊的問題:

它是一個concidence是有問題的語句丟失字ON

CREATE INDEX IF NOT EXISTS IDX_FILE_FULLPATH_FILE_PARENT_DIR ON table_name(file_fullpath,file_parent_dir);
CREATE INDEX IF NOT EXISTS IDX_FILE_SIZE table_name(file_size); - 缺少ON
如果不存在,則創建索引IDX_TAG_TITLE ON table_name(tag_title);

在你問的所有問題中,有沒有看到「語法錯誤」的短語?

您是否試過簡單的步驟在sqlite3命令解釋器中運行SQL語句並看到哪個語法錯誤實際上正在獲取?

E.g.

SQLite version 3.6.14 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> create table foo (bar int, zot int); 
sqlite> create index barx on foo(bar); 
sqlite> create index zotx foo(zot); 
SQL error: near "foo": syntax error 
sqlite> 

你有沒有考慮細讀TFRRD (The Fantastic Rail-Road Diagram) in the docs?你寫道:「」「當我在較小的腳本(verifyIndexSmaller)中運行該命令時,它不會產生錯誤。如果我然後嘗試再次運行較大的腳本,即使索引是由較小的腳本創建的,我仍然收到錯誤「」「。

你有沒有考慮過你的沒有這個可能在較小的腳本中運行該命令,但實際上運行了該命令的另一個(固定!)版本?

你現在明白了爲什麼S.Lott試圖讓你減少華夫餅乾,並專注於導致錯誤的SQL片斷嗎?

+0

這不是巧合,但我一直盯着它看太久,看不見什麼。我在原來的文章中清楚地概述了SQL問題。我已經分解了腳本中的每一行,並單獨運行它們,這是我怎麼知道哪一行是問題,但不知何故,我只是沒有看到丟失的關鍵字。我以爲我甚至已經從工作腳本複製並粘貼了「破碎的腳本」,但顯然我沒有。感謝第二雙眼睛! – 2010-03-05 14:16:50

+0

不要感謝我,只要依靠upvote按鈕:-) – 2010-03-05 14:45:47