Python psycopg2 lobject类-使用位流插入大型对象

Python psycopg2 lobject类-使用位流插入大型对象,python,mysql,types,psycopg2,Python,Mysql,Types,Psycopg2,在python+psycopg2中,是否可以使用位流创建/写入Postgresql大型对象,而不是在文件系统中输入指向本地文件的路径 为什么会有这样的要求 我正在编写一个数据库迁移脚本mysql>postgresql。在源数据库(mysql)中,二进制文件存储在longblob字段中 使用标准方法将大型对象导入postgresql是一种过分的做法,因为它需要输入中本地文件的路径,因此在执行大型对象导入之前,我必须将每个二进制文件转储到OS本地文件中 我试过的 在阅读官方的psycopg2文档时,

python
+
psycopg2
中,是否可以使用位流创建/写入
Postgresql
大型对象,而不是在文件系统中输入指向本地文件的路径

为什么会有这样的要求 我正在编写一个数据库迁移脚本mysql>postgresql。在源数据库(mysql)中,二进制文件存储在longblob字段中

使用标准方法将大型对象导入postgresql是一种过分的做法,因为它需要输入中本地文件的路径,因此在执行大型对象导入之前,我必须将每个二进制文件转储到OS本地文件中

我试过的 在阅读官方的
psycopg2
文档时,似乎(但我不确定)可以使用该方法。它是
lou write
函数的包装器

我一直在尝试以多种不同的方式使用这种方法,但没有成功。我想靠近的是这个,但我有一个打字错误:

cnx_psql.lobject(0,mode='w').write(行['content'])
TypeError:lobject.write需要一个字符串;取而代之的是bytearray
其中,
row['content']
是我之前从longblob类型的mysql字段中选择的数据


有人知道如何做到这一点吗

提前感谢您提供的任何信息


如果我遗漏了什么,请告诉我。

第一选项:外部数据包装器

也许您可以使用外部数据包装器,比如mysql_fdw

有了它,您可以在postgresql数据库中创建一个外部表,然后只需

insert into new_table select * from foreign_table;
。。。服务器会将所有记录从外部(MySQL)表拉入本地表,甚至不会将数据传输到客户端。您可以轻松地将MySQL中的LONGBLOB映射到PostgreSQL中的bytea。bytea类型允许长度最大为1GB的值

要获得更多的感觉,请参见和

第二选项:复制

如果那没用,也许你可以用COPY。Psycopg2的游标有,它接受一个文件对象,它基本上是您使它成为的任何对象,只要它有.read()和.readline()

第三个选项:修复您遇到的错误。
如果您确实知道自己在做什么,并且已经阅读了,但仍然希望使用lobject,那么请修复错误。Write显然需要字符串,但您正在传入bytearray。转换取决于Python版本,请参见如何将我的bytearray('b\x9e\x18K\x9a')转换为类似以下内容-->'\x9e\x18K\x9a'非常感谢您的回答!我正在评估您提供的选项,看看哪一个更适合我的场景