维基百科SQL转储无法使用Python/SQLite加载

tod*_*le3 1 python sql sqlite python-2.7

我使用python的sqlite3库来处理Wikipedia .sql数据转储,我收到以下"语法错误"报告:

sqlite3.OperationalError: no such table: categorylinks
Run Code Online (Sandbox Code Playgroud)

下面是我将.sql导入数据库的步骤

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

并且.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;
Run Code Online (Sandbox Code Playgroud)

我真的没有发现该int(8) unsigned NOT NULL DEFAULT部件有任何问题.此文件由维基百科发布,因此应该可以使用.我知道Python sqlite3与MySQL的实现略有不同.它与此有关吗?

小智 5

这不是SQLite所理解的SQL.加载它sqlite3会产生错误.

% sqlite3 < enwiki-latest-categorylinks.sql
Error: near line 1: near "unsigned": syntax error
Run Code Online (Sandbox Code Playgroud)

这与Python无关.

您有两种选择:

  1. 用MySQL导入SQL文件.
  2. 将其转换为SQLite可以理解的SQL.