这就是我在Topics表中获取所有字段topicid
的方法。
all_topicid = [i.topicid for i in session.query(Topics)]
但是当Topics表有很多值时,vps会杀死这个进程。那么有什么好方法可以解决这个问题吗?
谢谢大家。我再次编辑我的代码,我的代码如下:
last = session.query(Topics).order_by('-topicid')[0].topicid
all_topicid = [i.topicid for i in session.query(Topics.topicid)]
all_id = range(1, last+1)
diff = list(set(all_id).difference(set(all_topicid)))
我想得到diff
。现在它比以前更快。那么还有其他方法来改进这段代码吗?
答案 0 :(得分:1)
您可以尝试更改查询以返回ID列表:
all_topic_id = session.query(Topics.topicid).all()
如果表格包含重复的主题代码,您可以在上面添加不同的内容以返回唯一值
from sqlalchemy import distinct
all_topic_id = session.query(distinct(Topics.topicid)).all()
如果这仍然导致问题,我可能会去编写一个返回topicid列表的存储过程,并让sqlalchemy调用它。
对于第二部分,我会做类似下面的事情。
from sqlalchemy import distinct, func
all_topic_id = session.query(distinct(Topics.topicid)).all() # gets all ids
max_id = session.query(func.max(Topics.topicid)).one() # gets the last id
all_ids = range(1, max_number[0] + 1)) # creates list of all id's
missing_ids = list(set(all_topic_ids) - set(max_id)) # creates a list of missing id's