如何使用 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.
我正在使用 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.