Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减少将POstgreSQL表带到500000行的Panda的执行时间的替代方法?_Python_Postgresql_Pandas_Psql - Fatal编程技术网

Python 减少将POstgreSQL表带到500000行的Panda的执行时间的替代方法?

Python 减少将POstgreSQL表带到500000行的Panda的执行时间的替代方法?,python,postgresql,pandas,psql,Python,Postgresql,Pandas,Psql,我有一个包含70个表的PostgreSQL数据库,我希望访问其中一个名为“hub\u psm\u log\u inter”的特定表。我想把它带给熊猫,并对它进行一些操作。我正在访问的表的形状为(500000,23),将来可能会增加执行psql.read\u sql\u查询大约需要3分钟。我希望减少所需时间。对我来说重要的行是在哪里(cust\u hub\u id=358和status\u switch=1)。df_on的形状只有10000行 import numpy as np import

我有一个包含70个表的PostgreSQL数据库,我希望访问其中一个名为“hub\u psm\u log\u inter”的特定表。我想把它带给熊猫,并对它进行一些操作。我正在访问的表的形状为(500000,23),将来可能会增加执行psql.read\u sql\u查询大约需要3分钟。我希望减少所需时间。对我来说重要的行是在哪里(cust\u hub\u id=358和status\u switch=1)。df_on的形状只有10000行

import numpy as np  
import pandas as pd  

import psycopg2 as pg  
import pandas.io.sql as psql

conn = pg.connect(
    database = '', 
    user = '', 
    password = '', 
    host = '', 
    port = '' 
)

df2 = psql.read_sql_query("SELECT * FROM hub_psm_log_inter", conn)


df4 = df2[df2.cust_hub_id == 358]
df4['status_switch'] = pd.to_numeric(df4['status_switch'], errors='coerce')
df_on = df4[df4.status_switch == 1]

在SQL查询中使用
WHERE
子句:

SELECT * FROM hub_psm_log_inter WHERE cust_hub_id = 358 AND status_switch = 1
从代码的外观来看,
status\u switch
可能作为字符串存储在表中,因此您可能需要引用它,即

SELECT * FROM hub_psm_log_inter WHERE cust_hub_id = 358 AND status_switch = '1'

在SQL查询中使用
WHERE
子句:

SELECT * FROM hub_psm_log_inter WHERE cust_hub_id = 358 AND status_switch = 1
从代码的外观来看,
status\u switch
可能作为字符串存储在表中,因此您可能需要引用它,即

SELECT * FROM hub_psm_log_inter WHERE cust_hub_id = 358 AND status_switch = '1'

我不是这方面的专家,但是。。。只是想一想:您是否尝试在sql查询中包含您的操作?为什么不将您的操作带到数据中,而不是将数据带到您的操作中,例如,执行一个好的旧SQL查询。您想导入所有500k行,还是只导入cust_hub_id==358和status_switch==1?只导入cust_hub_id=358和status_switch==1?我不是这方面的导出,但。。。只是想一想:您是否尝试在sql查询中包含您的操作?为什么不将您的操作带到数据中,而不是将数据带到您的操作中,也就是说,执行一个好的旧SQL查询。您想导入所有500k行还是只导入cust_hub_id==358和status_switch==1?只导入cust_hub_id=358和status_switch==1字符串格式化SQL查询和手动引用等容易出错。最好在传递值时使用,并让驱动程序担心这些事情。使用
pandas.read_sql_query()
可以在语句中使用
params
关键字参数以及依赖于驱动程序的占位符。字符串格式sql查询和手动引用等容易出错。最好在传递值时使用,并让驱动程序担心这些事情。使用
pandas.read_sql\u query()
可以在语句中使用
params
关键字参数以及依赖于驱动程序的占位符。