python PostgreSQL:除PgAdmin或Dbeaver外,所有查询都运行缓慢

mrfwxfqh  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(234)

我试着运行一个Python程序来查询我们的数据库。
但不幸的是,我用psycopg 2运行的任何查询都非常非常非常慢。
作为一个例子,你可以在图片中看到,同样的查询在dbever中花费了47 ms,而在Python中花费了超过3分钟!过去我试图从dbever转移到oracle客户端。但我在oracle中的所有查询都太慢了,所以我决定留在dbever上。
但是脚本和对数据库进行查询是我的项目所需要的。
下面是我正在查询的表“bex”的一个例子:
| 识别号|姓名|电码|代码_acr|
| - ------|- ------|- ------|- ------|
| 1个|巴黎|PAR|PAR|
| 第二章|第戎|DIJ公司|DIJ公司|
| 三个|布雷斯特|业务参考系统|快速公交|
| 四个|土伦|传输线|传输线|
下面是我在Python中使用的代码:

import psycopg2

try:
    conn = psycopg2.connect(
            host="xxxxx.sogate-pacy.xxxxxx.fr",
            dbname="xxxxxx",
            user="xxxxxxx",
            password="\<xxxxx\>",
            port="5432",
            options="-c search_path=xxx",
            sslmode = "disable"
    )

    cursor = conn.cursor()
    postgreSQL_select_Query = "SELECT * FROM bex"
    
    cursor.execute(postgreSQL_select_Query)
    ouvrage = cursor.fetchone()
    
    print("Print each row and it's columns values")
    print(cursor.fetchone())

except (Exception, psycopg2.Error) as error:
    print("Error while fetching data from PostgreSQL", error)

finally:
    # closing database connection.
    if conn:
        cursor.close()
        conn.close()
        print("PostgreSQL connection is closed")

我尝试创建Python脚本从数据库中获取数据
需要注意的是,该表总共只有10行。
即使执行select只返回一行,也会发生这种情况

mm9b1k5b

mm9b1k5b1#

Python代码将整个BEX表提取到Python进程内存空间的内存中,然后处理第一行并丢弃其余行。(或类似的东西)只读取少量的行,直到您执行调用更多行的操作。您可以使用psycopg2“命名游标”在您自己的python代码中获得与pgAdmin4相同的行为。

相关问题