【发布时间】:2012-04-19 16:01:37
【问题描述】:
我有一个数据库
books (primary key: bookID)
characterNames (foreign key: books.bookID)
locations (foreign key: books.bookID)
字符名称和位置的文本位置保存在相应的表中。
现在我想使用 psycopg2 编写一个 Python 脚本来查找给定字符名称和书中给定位置的所有出现,两者都出现。
目前,我执行 4 个查询:
SELECT bookID, position FROM characterNames WHERE name='XXX';
--> result is saved in list 'charnames'
SELECT DISTINCT bookID FROM characterNames WHERE name='XXX';
--> result is saved in list 'charnamesIDs'
SELECT bookID, position FROM locations WHERE locName='YYY';
--> result is saved in list 'locs'
SELECT bookID FROM locations WHERE locName='YYY';
--> result is saved in list 'locsIDs'
这两个查询都可以为我提供仅显示名称或位置的 bookID。所以我的目标是消除所有的 'charnames' 元素,而 bookID 没有出现在 'locs' 中,反之亦然。我的做法是:
for cnameTuple in charnames:
~if cnameTuple[0] in locsIDs:
~~continue
~del(cname)
我为 locs 中的元组做了一个相应的循环。
不幸的是,这个算法需要很多时间。有没有办法更快地完成这项任务?
【问题讨论】:
-
我回滚了最后的编辑,因为这些编辑现在进入this separate question(按照建议)。
标签: python postgresql psycopg2