python - 通过 psycopg2 提取 postgresql 查询的结果
问题描述
我正在通过 psycopg2 库查询 PostgreSQL 数据库。以这种方式查询的响应是游标对象文件。由于查询的大小,我试图避免重新查询它,而是将查询结果保存为pickle。
不幸的是,当我尝试为此执行代码时:
import psycopg2
import pickle
# Connect to an existing database
conn = psycopg2.connect(dbname="DB", user="my_user", password="****", host="12.34.56.78")
# Open a cursor to perform database operations
cur = conn.cursor()
# Query the database and obtain data as Python objects
cur.execute("SELECT * FROM my_table[...];")
# Attempt to pickle the output
pickle_out = open("output.pickle","wb")
pickle.dump(cur, pickle_out)
pickle_out.close()
# Close communication with the database
cur.close()
conn.close()
出现错误消息:
TypeError: can't pickle psycopg2.extensions.cursor objects
什么是通过 python 保存 SQL 查询结果以供将来使用的直接方法?
注意:我没有义务使用泡菜。这对我来说似乎是一个最佳解决方案。
解决方案
我认为您需要cur.fetchall()
aftercur.execute()
及其变化。
https://psycopg.org/docs/cursor.html了解更多详情。
例如:
import numpy as np
import psycopg2
import pickle
# Connect to an existing database
conn = psycopg2.connect(dbname="DB", user="my_user", password="****", host="12.34.56.78")
# Open a cursor to perform database operations
cur = conn.cursor()
# Query the database and obtain data as Python objects
cur.execute("SELECT * FROM my_table[...];")
cur_out = np.asarray(cur.fetchall())
# Attempt to pickle the output
# Attempt to pickle the output
pickle_out = open("output.pickle","wb")
pickle.dump(cur_out, pickle_out)
pickle_out.close()
推荐阅读
- r - 如何在 R 中创建分位数,取决于家庭收入和家庭支出
- python - 使用 PyOpenGL,如何在 .obj 文件上应用实例化?
- flutter - AnimatedCrossFade 不能与 SingleChildScrollView 一起正常工作
- python - 如果使用 sql 查询 python 对空结果不起作用
- flutter - 颤振旋转 XY 图像
- mysql - 如果数据存在,则加入多个表
- apache-spark - 避免在没有缓存的情况下对 Spark 中的代码进行延迟评估
- reactjs - 如何在 Typescript 中为 React useReducer 挂钩操作创建类型定义?
- php - 如何将引导模式存储在变量中?
- wpf - 将标题和内容动态绑定到扩展器