我正在寻找一种更有效的方法在 Python 中执行 SQL 查询。运行查询时,我当前的流程似乎是最佳的,但是考虑到执行时间,数据帧的转换过程似乎效率低下。
下面是我的代码的粗略框架。我很抱歉没有提供完全可重现的示例,因为需要连接到 Oracle。
import pandas as pd
import pyodbc
import time
login_info = f"""
Driver={{IBM DB2 ODBC DRIVER - IBMDBCL1}};
HostName=xxx;
Port=xxx;
Security=xxx;
Database=xxx;
UID={xxx};
PWD={xxx};
"""
conn = pyodbc.connect(login_info)
cursor = conn.cursor()
def execute_sql(query):
query_start_time = time.time()
cursor.execute(query)
cols = [c[0] for c in cursor.description]
cols = list(map(lambda x: x.lower(), cols))
query_rt = "--- Query Runtime: %s seconds ---" % (time.time() - query_start_time)
df = pd.DataFrame.from_records(cursor.fetchall(), columns=cols)
total_rt = "--- Total Runtime: %s seconds ---" % (time.time() - query_start_time)
print(query_rt)
print(total_rt)
return df
loss_query = '''
select * from xxx limit 1
'''
loss_df = execute_sql(loss_query)
运行未指定的查询时,查询运行时间 = 99 秒,总运行时间 = 359 秒。对我来说,将光标转换为数据帧所需的时间比执行查询所需的时间长 2.6 倍,这似乎很奇怪,但也许这是标准的?
执行标准查询的方式,运行时间取决于您尝试获取的数据量,此外我们还需要考虑数据库服务器和您的机器的处理能力。