使用 pandas 插入数据或使用串行密钥插入 psycopg?
Inserting data with pandas or psycopg with a serial key?
我有一个简单的维度 table,它存储来自多个文件的所有唯一维度。
在 postgres 中,我制作了 table:
CREATE TABLE dimension_purpose (
purpose_key SERIAL PRIMARY KEY,
purpose text NOT NULL UNIQUE
);
现在我正在尝试有效地向此 table 添加新行。我能够轻松识别新维度(使用 pandas),但我无法将它们插入此 table。我通常使用
def load_to_database(table_name, file_object, header=True):
fake_conn = sqlalchemy.create_engine(engine).raw_connection()
fake_cur = fake_conn.cursor()
sql = 'COPY {} FROM STDIN WITH CSV HEADER'.format(table_name)
fake_cur.copy_expert(sql=sql, file=file_object)
fake_conn.commit()
fake_cur.close()
如果我尝试批量复制,我会收到一条错误消息,提示 'purpose' 不是整数(它试图将自身插入 purpose_key 字段)。
将单列数据插入目的字段然后让 SERIAL purpose_key 自动更新的最佳方法是什么?
如果我的 df 只是一列,我可以使用 df.to_sql 执行此操作吗?
您可以在 COPY
命令中指定列,例如
COPY dimension_purpose (purpose) FROM STDIN WITH CSV HEADER
我有一个简单的维度 table,它存储来自多个文件的所有唯一维度。
在 postgres 中,我制作了 table:
CREATE TABLE dimension_purpose (
purpose_key SERIAL PRIMARY KEY,
purpose text NOT NULL UNIQUE
);
现在我正在尝试有效地向此 table 添加新行。我能够轻松识别新维度(使用 pandas),但我无法将它们插入此 table。我通常使用
def load_to_database(table_name, file_object, header=True):
fake_conn = sqlalchemy.create_engine(engine).raw_connection()
fake_cur = fake_conn.cursor()
sql = 'COPY {} FROM STDIN WITH CSV HEADER'.format(table_name)
fake_cur.copy_expert(sql=sql, file=file_object)
fake_conn.commit()
fake_cur.close()
如果我尝试批量复制,我会收到一条错误消息,提示 'purpose' 不是整数(它试图将自身插入 purpose_key 字段)。
将单列数据插入目的字段然后让 SERIAL purpose_key 自动更新的最佳方法是什么?
如果我的 df 只是一列,我可以使用 df.to_sql 执行此操作吗?
您可以在 COPY
命令中指定列,例如
COPY dimension_purpose (purpose) FROM STDIN WITH CSV HEADER