如何使用 Python 将数据从 CSV 复制到 QuestDB?

How can I copy data from CSV into QuestDB using Python?

我正在使用 psychopg2 模块从 Python 查询 QuestDB。我在使用 copy_from() 游标对象将 CSV 数据导入 table 时遇到了一些问题。将其放入数据库的最佳方法是什么?

我正在尝试以下操作:

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() 包装器正在后台执行一些 SQL,QuestDB 目前还不支持,具体来说,它将 运行

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 documentation page.