我开发了一个用PyQt和sqlite来管理科学文章的软件。每篇文章都存储在sqlite数据库中,并来自特定的期刊。
有时,我需要对期刊的文章进行一些验证。所以我构建了两个列表,一个包含文章的DOI(一个DOI只是文章的唯一ID),一个包含布尔值,如果文章没问题,则为True;如果文章不是,则为False:
def listDoi(self, journal_abb):
"""Function to get the doi from the database.
Also returns a list of booleans to check if the data are complete"""
list_doi = []
list_ok = []
query = QtSql.QSqlQuery(self.bdd)
query.prepare("SELECT * FROM papers WHERE journal=?")
query.addBindValue(journal_abb)
query.exec_()
while query.next():
record = query.record()
list_doi.append(record.value('doi'))
if record.value('graphical_abstract') != "Empty":
list_ok.append(True)
else:
list_ok.append(False)
return list_doi, list_ok
此函数返回两个列表。这些列表每个可包含约2000个项目。在那之后,为了检查文章是否正常,我只是检查它是否在两个列表中。
编辑:我还需要检查文章是否只在list_doi中。
所以我想知道,因为这里的表现很重要:什么是更快/更好/更经济:
RAM的速度和空间怎么样?如果项目很少或很多项目,结果会不同吗?
答案 0 :(得分:0)
使用time.perf_counter()确定此进程当前需要多长时间。
time_start = time.perf_counter()
# your code here
print(time.perf_counter() - time_start)
基于此,如果它太慢(),您可以尝试每个选项,并为它们计时以寻找性能方面的改进。至于检查RAM使用情况,一个简单的方法是:
import os
import psutil
process = psutil.Process(os.getpid())
print process.get_memory_info()[0] / float(2 ** 20) # return the memory usage in MB
有关更深入的内存使用情况检查,请查看此处:https://stackoverflow.com/a/110826/3841261总是有办法在寻求提高速度/ RAM使用率等时进行客观测量。
答案 1 :(得分:0)
我会执行一个sql查询,一次找到好的文章(可能在一个名为find_articles()
的函数中)
以这种方式思考,为什么要做两次(复制所有这些行并使用它们),当你可以做一次?
你想基本上执行这个:
SELECT * from papers where (PAPERID in OTHERTABLE and OTHER RESTRAINT = "WHATEVER")
这显然只是伪代码,但我认为你可以搞清楚。