我正在尝试使用 asyncpg 将大型 Pandas 数据帧写入 postgres,但在尝试使用 copy_to_table 函数时出现错误。
我有使用 psycopg2.copy_from 使用 StringIO 的工作代码,但是当我尝试使用 asyncpg 实现类似的模式时它不起作用
使用 StringIO
sio = StringIO(df.to_csv(index=None, header=None))
sio.seek(0)
async with pg_pool.acquire() as conn:
async with conn.transaction():
s = await conn.copy_to_table('tmp_table', source=sio, columns=list(df.columns), delimiter=',')
这是我使用 StringIO 得到的错误:
Exception: memoryview: a bytes-like object is required, not 'str'
我还尝试将数据框加载到 BytesIO 对象中,但我遇到了与 to_csv 不同的问题:
bio = BytesIO(df.to_csv(index=None, header=None))
bio.seek(0)
TypeError: a bytes-like object is required, not 'str'
我很确定我在这里将数据帧转换为错误的字节。无论哪种方式,我只想使用 asyncpg 通过 COPY 命令将大型数据帧加载到 postgres 中 - 而不是逐行加载。