资讯专栏INFORMATION COLUMN

sqlite3使用sqlite2创建的数据库

shiyang6017 / 2371人阅读

摘要:问题用创建了一个数据库。会得到大魔法师人族水元素暴风雪辉煌光环时空传送山丘之王人族风暴之锤雷霆一击重击天神下凡血魔法师人族炎击放逐吸魔火凤凰圣骑士人族圣光圣盾神圣光环复活但是用通过操作的时候会报错。我想也许是和创建的数据库格式不同造成的。

问题

sqlite 2.8.17 创建了一个数据库 heroes.db
其中创建了一个表 heroes,这张表中存储的是魔兽争霸中英雄的技能数据。
select * from heroes;会得到:

大魔法师|人族|水元素|暴风雪|辉煌光环|时空传送
山丘之王|人族|风暴之锤|雷霆一击|重击|天神下凡
血魔法师|人族|炎击|放逐|吸魔|火凤凰
圣骑士|人族|圣光|圣盾|神圣光环|复活

但是用python通过sqlite3操作heroes.db的时候会报错。

Error: file is encrypted or is not a database

我想也许是sqlite3和sqlite2创建的数据库格式不同造成的。

果然,直接用sqlite3的命令行工具操作heroes.db,也报同样的错误。

解决

接下来的工作,就是把sqlite2创建的heroes.db转换成sqlite3可以使用的格式:

sqlite heroes.db打开数据库文件,然后在sqlite shell中执行:

.output heroes.sql
.dump heroes
.exit

现在heroes.sql的内容如下:

BEGIN TRANSACTION;
create table heroes (name varchar, race varchar, skill1 varchar, skill2 varchar, skill3 varchar, superskill varchar);
INSERT INTO heroes VALUES("大魔法师","人族","水元素","暴风雪","辉煌光环","时空传送");
INSERT INTO heroes VALUES("山丘之王","人族","风暴之锤","雷霆一击","重击","天神下凡");
INSERT INTO heroes VALUES("血魔法师","人族","炎击","放逐","吸魔","火凤凰");
INSERT INTO heroes VALUES("圣骑士","人族","圣光","圣盾","神圣光环","复活");
COMMIT;

可以把原来的heroes.db删除了: rm heroes.db

用sqlite3创建新的数据库文件并导入数据:

sqlite3 heroes.db < heroes.sql
验证

现在再用sqlite3 打开heroes.db看看,已经可以进行查询和增改删操作了。
当然python也能通过import sqlite3使用该数据库了。

注意,再用sqlite时,直接使用sqlite3比较好,因为python好像只直接支持sqlite3。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37848.html

相关文章

发表评论

0条评论

shiyang6017

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<