2012-07-24 21 views
0

我使用python 2.7.2中的SQLite版本3.3.6。Sqlite3:错误表在从python连接数据库查询期间被删除

虽然与executescript()从Python脚本执行这个查询:

attach database 'Capacity.db' as WeekAgo; 
drop table if exists maximums; 
create table maximums (Element TEXT UNIQUE, Score NUMBER , Report TEXT); 
insert into maximums (Element, Score, Report) select * from WeekAgo.maximums; 

我总是结束了在连接数据库WeekAgo.maximums表的删除和脚本崩溃,没有WeekAgo.maximums了存在。我究竟做错了什么?没有DROP IF EXISTS,一切工作正常。

+0

我很好笑,为什么在DROP期间它会下降WeekAgo.maximums而不是最大值???它至少可以说没有找到最大值,强制我使用DB名称作为前缀,以严格标识表。其实正是你在下面建议的。我希望有一些错误可以指出我没有正确识别表格。 – 2012-07-24 12:44:49

+0

“可选的IF EXISTS子句可以抑制在表不存在时通常会导致的错误。” https://www.sqlite.org/lang_droptable.html – 2012-07-24 12:46:20

回答

5

使用main关键字:

attach database 'Capacity.db' as WeekAgo; 
drop table if exists main.maximums; 
create table main.maximums (Element TEXT UNIQUE, Score NUMBER , Report TEXT); 
insert into main.maximums (Element, Score, Report) select * from WeekAgo.maximums; 

https://www.sqlite.org/lang_attach.html

如果在不同的数据库中两个或多个表具有相同的名称和数据库名称的前缀是不是在桌子参考使用,那么所选的表格就是数据库中最近连接的那个表格。

+0

谢谢你的答案。这真的是出乎意料的行为。在逻辑上,没有数据库前缀,它应该使用首先打开的数据库,如主工作区。 – 2012-07-24 12:47:18

+0

从逻辑上讲,它的行为应该与记录中的相似:) – 2012-07-24 12:47:46

+0

我已将此帖子的链接发送到相关报告系统 - 如果它获得票号或其他内容,将发布更新。 – 2012-07-24 13:02:33