我有一个数据库
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 中的元组做了一个相应的循环。
不幸的是,这个算法需要很多时间。有没有办法更快地执行此任务?