来自http://initd.org/psycopg/docs/usage.html#using-copy-to-and-copy-from
cursor
对象为高效的PostgreSQLCOPY
命令提供了一个接口(copy_to()
、copy_from()
、copy_expert()
),以便将数据从文件移动到表中并返回。目前,在PostgreSQL和COPY
类型之间没有提供任何调整:文件可以是任何类似于COPY
文件的对象,但是它的格式必须是PostgreSQLCOPY
命令(数据格式、转义字符等)所接受的格式。
cursor.execute()
可以将命令作为字符串发送到PostgreSQL服务器以执行。那么,为什么精神病学提供cursor
的方法(copy_to()
、copy_from()
、copy_expert()
),而不是调用cursor.execute()
将COPY
命令作为字符串发送给PostgreSQL服务器执行?
谢谢。
发布于 2018-08-15 06:25:29
您可以使用execute()
发送一个命名文件的复制命令,并使用占位符传递文件名,但是由于它需要数据库超级用户权限,因为它可以读取/写入服务器可以访问的所有文件,所以最好避免它。
我认为使用STDIN和STDOUT进行数据接收和发送的复制命令存在特殊方法,因为execute()
中指定的DBAPI 2规范不支持这种方法。
此外,copy_expert()
还支持发送自定义复制命令,同时使用STDIN和STDOUT。例如,处理CSV非常方便。
https://stackoverflow.com/questions/51858564
复制