【问题标题】:custom database query with Python使用 Python 自定义数据库查询
【发布时间】:2021-09-17 13:03:50
【问题描述】:

我有一个可通过 microsoft access 访问的大型数据库(超过 500 万行)。 到目前为止,我可以使用 python 将整个表拉到一个数据框中,但是处理时间很长(超过 15 分钟),这很疯狂,因为我只需要处理整个表的一小部分.. .

import pyodbc
import pandas as pd


conn_str(
r'DRIVER = {Adaptive Server Enterprise};'
r'DBQ = \\path_where_the_table_is_located.mdb;'
r'SERVER = server_name;'
r'Databse = ...;'
r'UID = xxx;'
r'PWD = xxx;'
r'port = xxx')


con = pyodbc.connect(conn_str)
cursor = conn.cursor()

df  = pd.read_sql('select * table_to_be_converted_into_a_df, conn)

如何增强上面的查询,只请求整个表的一小部分并更快地运行它?

df1 = df.loc[df['date'] == '2021-07-07']

这是我在完成后运行以缩小 df 的代码,我想以某种方式将其添加到初始查询中,以仅查询我需要的数据并更快地运行它

【问题讨论】:

    标签: python sql pandas database pyodbc


    【解决方案1】:

    更改 SQL 查询本身,使其仅返回该日期的行,看起来类似于...

    select * from table_to_be_converted_into_a_df where date = '2021-07-07';

    这将减少从数据库返回到您的 Python 脚本的数据总量——这可以显着加快您的脚本速度。但是,如果您的表 table_to_be_converted_into_a_dfdate 列上没有索引,那么您的查询仍将扫描整个表,这可能需要一段时间。

    如果是这种情况,请考虑向date 列添加索引。

    【讨论】:

    • 太棒了!我尝试了你的代码,我在 20 分钟不到 3 秒的时间内得到了结果,这对我来说是一个很好的改进:)
    • @chris 是否可以在访问数据库中添加索引?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2023-03-29
    相关资源
    最近更新 更多