来自http://initd.org/psycopg/docs/usage.html#using-copy-to-and-copy-from
Psycopg
cursor
对象为高效的PostgreSQLcopy_to()
命令提供了接口(copy_from()
,copy_expert()
,COPY
),以将数据从文件移动到表中,并背部。 目前,COPY
上的Python和PostgreSQL类型之间没有提供任何适应: 该文件可以是任何类似Python文件的对象,但其格式必须采用以下格式: PostgreSQLCOPY
命令(数据格式,转义字符等)。
cursor.execute()
可以将命令作为字符串发送给PostgreSQL服务器以执行。那么,为什么Psycopg为什么提供cursor
的方法(copy_to()
,copy_from()
,copy_expert()
),而不是调用cursor.execute()
发送COPY
命令作为PostgreSQL服务器执行的字符串?
谢谢。
答案 0 :(得分:2)
您可以发送使用execute()
命名文件的COPY命令,并使用占位符传递文件名,但是由于它需要数据库超级用户特权,因为它可以读取/写入服务器有权访问的所有文件,通常最好避免这种情况。
我想存在使用STDIN和STDOUT接收和发送数据的COPY命令的特殊方法,因为execute()
中指定的DBAPI 2 spec不支持这种方法。
copy_expert()
也支持在使用STDIN和STDOUT时发送自定义的COPY命令。例如,它非常适合处理CSV。