为什么Psycopg提供了cursor的方法(copy_to(),copy_from())而不是调用cursor.execute()发送COPY命令?

时间:2018-08-15 12:18:09

标签: python postgresql psycopg2

来自http://initd.org/psycopg/docs/usage.html#using-copy-to-and-copy-from

  

Psycopg cursor对象为高效的PostgreSQL copy_to()命令提供了接口(copy_from()copy_expert()COPY),以将数据从文件移动到表中,并背部。   目前,COPY上的Python和PostgreSQL类型之间没有提供任何适应:   该文件可以是任何类似Python文件的对象,但其格式必须采用以下格式:   PostgreSQL COPY命令(数据格式,转义字符等)。

cursor.execute()可以将命令作为字符串发送给PostgreSQL服务器以执行。那么,为什么Psycopg为什么提供cursor的方法(copy_to()copy_from()copy_expert()),而不是调用cursor.execute()发送COPY命令作为PostgreSQL服务器执行的字符串?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以发送使用execute()命名文件的COPY命令,并使用占位符传递文件名,但是由于它需要数据库超级用户特权,因为它可以读取/写入服务器有权访问的所有文件,通常最好避免这种情况。

我想存在使用STDIN和STDOUT接收和发送数据的COPY命令的特殊方法,因为execute()中指定的DBAPI 2 spec不支持这种方法。

copy_expert()也支持在使用STDIN和STDOUT时发送自定义的COPY命令。例如,它非常适合处理CSV。