我试着运行一个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只返回一行,也会发生这种情况
1条答案
按热度按时间mm9b1k5b1#
Python代码将整个BEX表提取到Python进程内存空间的内存中,然后处理第一行并丢弃其余行。(或类似的东西)只读取少量的行,直到您执行调用更多行的操作。您可以使用psycopg2“命名游标”在您自己的python代码中获得与pgAdmin4相同的行为。