2012-10-18 25 views
0

我使用python的sqlite3的庫來處理維基百科.SQL數據轉儲,我也得到了下面的「語法錯誤」的報告:維基百科SQL轉儲不使用Python/SQLite的可裝載

sqlite3.OperationalError: no such table: categorylinks 

下面是步驟我都帶到.SQL導入到我的數據庫

import sqlite3 
con = sqlite3.connect('wikicategories.db') 
infile = open('enwiki-latest-categorylinks.sql') 
str = infile.read() 
cur = con.cursor() 
cur.execute(str) 

和.sql文件的開頭是這樣的:

CREATE TABLE `categorylinks` (
    `cl_from` int(8) unsigned NOT NULL DEFAULT '0', 
    `cl_to` varbinary(255) NOT NULL DEFAULT '', 
    `cl_sortkey` varbinary(230) NOT NULL DEFAULT '', 
    `cl_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `cl_sortkey_prefix` varbinary(255) NOT NULL DEFAULT '', 
    `cl_collation` varbinary(32) NOT NULL DEFAULT '', 
    `cl_type` enum('page','subcat','file') NOT NULL DEFAULT 'page', 
    UNIQUE KEY `cl_from` (`cl_from`,`cl_to`), 
    KEY `cl_timestamp` (`cl_to`,`cl_timestamp`), 
    KEY `cl_collation` (`cl_collation`), 
    KEY `cl_sortkey` (`cl_to`,`cl_type`,`cl_sortkey`,`cl_from`) 
) ENGINE=InnoDB DEFAULT CHARSET=binary; 

我真的沒有看到int(8) unsigned NOT NULL DEFAULT部分有任何問題。而這個文件是由維基百科發佈的,因此應該可以使用了。我知道Python sqlite3與MySQL有一個稍微不同的實現w.r.t。這與這有什麼關係?

+1

這是s ** q ** lite3。無論如何,我不確定sqlite支持無符號整數。至少在[documentation](http://docs.python.org/library/sqlite3.html)中搜索「signed」或「unsigned」不會產生結果。 閱讀[這裏](http://www.sqlite.org/datatype3.html)只有一個提到無符號,但實際上被忽略。 – Bakuriu

+3

Thist'ENGINE = InnoDB'對我來說就像MySQL。你確定這個SQL在SQLite中工作嗎? – 2012-10-18 06:38:14

+2

「我知道Python sqlite3的實現方式與w.r.t MySQL稍有不同」 - 不管Python如何,SQLite的實現都不同於MySQL時期。 SQLite!= MYSQL,也不是由同一個人制作的。 –

回答

4

這不是SQL as understood by SQLite。用sqlite3加載它會產生一個錯誤。

% sqlite3 < enwiki-latest-categorylinks.sql 
Error: near line 1: near "unsigned": syntax error 

這與Python無關。

你有兩個選擇:

  1. 導入與MySQL的SQL文件。
  2. 將其轉換爲SQLite可以理解的SQL。