編輯索引: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);
不要那樣做。
編輯索引: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);
不要那樣做。
一些無聊的問題:
它是一個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片斷嗎?
這不是巧合,但我一直盯着它看太久,看不見什麼。我在原來的文章中清楚地概述了SQL問題。我已經分解了腳本中的每一行,並單獨運行它們,這是我怎麼知道哪一行是問題,但不知何故,我只是沒有看到丟失的關鍵字。我以爲我甚至已經從工作腳本複製並粘貼了「破碎的腳本」,但顯然我沒有。感謝第二雙眼睛! – 2010-03-05 14:16:50
不要感謝我,只要依靠upvote按鈕:-) – 2010-03-05 14:45:47
-1:代碼太多。你能把這個簡化成只顯示問題的代碼嗎?顯示錯誤的最小SQL?然後用簡短的點到點代碼樣本替換looooong代碼樣本? – 2010-03-05 11:06:42
減去錯誤處理和sql,那裏有14行代碼。我花了一個小時將代碼縮短到這一點,這是我能夠得到的最小的代碼,但仍然出現錯誤。 – 2010-03-05 13:04:05
@Nathan Spears:勇敢的,但問題仍然很大。什麼是「testIndexes」代碼?所有這些「verifyIndexes」代碼?你真的可以減少你在這裏發佈的代碼的數量,以便最小化地顯示問題。 – 2010-03-05 15:48:25