【发布时间】:2015-10-07 09:32:07
【问题描述】:
我正在尝试使用 sqlite3 Python 模块执行包含在 .sql 文件中的 SQL 脚本,以便将数据库从 Drupal 站点迁移到 Wordpress 站点。
所以我用这个小脚本打开并阅读了 .sql 文件:
def executeSQLScriptsFromFile(filename):
fd = open(filename, 'r')
sqlFile = fd.read()
fd.close()
sqlCommands = sqlFile.split(';')
for command in sqlCommands:
print " === BEGIN \n" + command + "\nEND === \n"
try:
c.execute(command)
except OperationalError, msg:
print "Command skipped: ", msg
当我使用我编写的 SQL 命令执行这段代码时,一切正常:CREATE TABLE、SELECT、DELETE...
但是当我尝试使用从网站数据库下载的 SQL 脚本时:
CREATE TABLE IF NOT EXISTS `node` (
`nid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`vid` int(10) unsigned NOT NULL DEFAULT '0',
`type` varchar(32) NOT NULL DEFAULT '',
`language` varchar(12) NOT NULL DEFAULT '',
`title` varchar(255) NOT NULL DEFAULT '',
`uid` int(11) NOT NULL DEFAULT '0',
`status` int(11) NOT NULL DEFAULT '1',
`created` int(11) NOT NULL DEFAULT '0',
`changed` int(11) NOT NULL DEFAULT '0',
`comment` int(11) NOT NULL DEFAULT '0',
`promote` int(11) NOT NULL DEFAULT '0',
`moderate` int(11) NOT NULL DEFAULT '0',
`sticky` int(11) NOT NULL DEFAULT '0',
`tnid` int(10) unsigned NOT NULL DEFAULT '0',
`translate` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`nid`),
UNIQUE KEY `vid` (`vid`),
KEY `node_changed` (`changed`),
KEY `node_created` (`created`),
KEY `node_moderate` (`moderate`),
KEY `node_promote_status` (`promote`,`status`),
KEY `node_status_type` (`status`,`type`,`nid`),
KEY `node_title_type` (`title`,`type`(4)),
KEY `node_type` (`type`(4)),
KEY `uid` (`uid`),
KEY `tnid` (`tnid`),
KEY `translate` (`translate`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=663 ;
我遇到了这个异常:
Command skipped: near "unsigned": syntax error
如您所见,我的 SQL 并不流利:p
有人知道可能是什么问题吗?
【问题讨论】:
-
你用的是sqlite3还是mysql?为什么这两者都被标记?基本上,sql 可能针对的是与您使用的不同的 sql 引擎 ...
标签: python mysql sql exception sqlite