如何从postgres中选择很多特定的行

时间:2018-01-24 23:39:38

标签: python postgresql pandas sqlalchemy

我正在运行一个需要从数据库中查询大量单行的程序。我有一个(自动收报机,时间戳)对的列表(在一个pandas DataFrame中),我需要从数据库中检索它们相应的价格。现在,我正在使用pandas的.apply()为pandas DataFrame中的每一行对数据库运行查询。这是顺序的。当我有太多数据并且想知道如何提高性能时,我发现这太慢了。

我看到两种方法,一种我认为我更喜欢但我不太了解的方法。

在一个案例中,我可以使用

创建一个session.query(T).filter(...)
or_( 
    and_(
        T.ticker == tickername[0],
        T.timestamp == timestamp[0]
    ),
    and_(
        T.ticker == tickername[1],
        T.timestamp == timestamp[1]
    ),
 .... 
)

在另一种情况下(如果有现有的方法,那就是我可能更喜欢的那种情况),我会设计一个

q = session.query(T).filter(
    and_(
        T.ticker= tickername,
        T.timestamp == timestamp
    )
) 

对于每个(自动收报机,时间戳)对,我对数据库(postgres)并行运行所有q。

我尝试过第一种方法,似乎某个地方存在导致事情悬空的瓶颈。

  • htop显示该进程占用了计算机内存的6.7%。
  • sqlalchemy可能是瓶颈,但我不知道如何检查。
  • postgres正在使用大量的CPU%(htop显示100%或低于100%),所以也许这是一个瓶颈

我不知道更好的方法来制作像这样的批量查询。

0 个答案:

没有答案