如何通过sqlalchemy获取一些字段列表?

时间:2014-12-09 00:16:34

标签: python sqlalchemy

这就是我在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。现在它比以前更快。那么还有其他方法来改进这段代码吗?

1 个答案:

答案 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