我尝试使用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
有人知道可能是什么问题吗?
答案 0 :(得分:1)
sqlite3不支持“unsigned”,它不支持AUTO_INCREMENT。可能还有一些sqlite3不支持的其他指令...我认为你从那个定位postgres或mysql的人那里得到了那个文件...修复它删除了sqlite3不支持的所有指令,或者使用相同的数据库文件目标的引擎
作为旁边你可以做到
c.executescript(open("my_sqcript.sql").read())
这里是适用于sqlite3
的架构CREATE TABLE IF NOT EXISTS `node` (
`nid` int(10) NOT NULL,
`vid` int(10) 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) NOT NULL DEFAULT '0',
`translate` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`nid`),
UNIQUE(`vid`)
) ;
这是由sqlalchemy
定义的表格class Node(Base):
__tablename__ = 'node'
nid = Column(Integer,primary_key=True)
vid = Column(Integer,default=0)
type = Column(String,default="")
language= Column(String,default="")
title = Column(String,default="")
uid = Column(Integer,default=0)
status = Column(Integer,default=1)
created = Column(Integer,default=0)
changed = Column(Integer,default=0)
comment = Column(Integer,default=0)
promote = Column(Integer,default=0)
moderate= Column(Integer,default=0)
sticky = Column(Integer,default=0)
tnid = Column(Integer,default=0)
translate= Column(Integer,default=0)