我使用psychopg2模块从Python对QuestDB进行查询。我在使用copy_from()游标对象将CSV数据放入表时遇到了一些麻烦。把这个输入数据库的最好方法是什么?
我正在尝试以下内容:
import pandas as pd
import numpy as np
import psycopg2
import os
conn = psycopg2.connect(user="admin",
password="quest",
host="127.0.0.1",
port="8812",
database="qdb")
cursor = conn.cursor()
dest_table = "eur_fr_bulk"
temp_dataframe = "./temp_dataframe.csv"
# input
df = pd.read_csv("./data/eur_fr.csv")
df.to_csv(temp_dataframe, index_label='id', header=False)
f = open(temp_dataframe, 'r')
cursor = conn.cursor()
try:
cursor.copy_from(f, dest_table)
conn.commit()
except (Exception, psycopg2.DatabaseError) as error:
os.remove(temp_dataframe)
print("Error: %s" % error)
conn.rollback()
cursor.close()
cursor.close()
psychopg2中的copy_from()
包装器正在后台执行一些尚未在QuestDB中支持的SQL,具体来说,它将运行
COPY my_table FROM stdin WITH DELIMITER AS ' ' NULL AS '\N'
DELIMITER
关键字尚未实现。作为一种解决方法,您可以在python中通过HTTP发出请求,这可能是最方便的:
import requests
csv = {'data': ('my_table_import', open('./data/eur_fr.csv', 'r'))}
server = 'http://localhost:9000/imp'
response = requests.post(server, files=csv)
print(response.text)
或者在server.conf
文件中指定一个拷贝目录,该目录允许加载CSV文件。这在COPY文档页面上有记录。