[英]Why does Psycopg provide `cursor`'s methods (`copy_to()`, `copy_from()`), instead of calling `cursor.execute()` to send a `COPY` command?
来自http://initd.org/psycopg/docs/usage.html#using-copy-to-and-copy-from
Psycopg
cursor
对象为高效的PostgreSQLCOPY
命令提供了一个接口(copy_to()
,copy_from()
,copy_expert()
),以将数据从文件移至表中以及移回表中。 当前,在COPY
上的Python和PostgreSQL类型之间没有提供任何适应性:该文件可以是任何类似Python文件的对象,但是其格式必须为PostgreSQLCOPY
命令接受的格式(数据格式,转义字符等)。
cursor.execute()
可以将命令作为字符串发送给PostgreSQL服务器以执行。 那么,为什么Psycopg为什么不提供cursor
的方法( copy_to()
, copy_from()
, copy_expert()
)而不是调用cursor.execute()
将COPY
命令作为字符串发送给PostgreSQL服务器来执行呢?
谢谢。
您可以使用execute()
发送COPY命令来命名文件,并使用占位符来传递文件名,但是由于它需要数据库超级用户特权,因为它可以读取/写入服务器可以访问的所有文件, 因此通常最好避免使用它 。
我想使用STDIN和STDOUT接收和发送数据的COPY命令存在特殊的方法,因为DBAPI 2规范中指定的execute()
不支持这种方法。
同样,在使用STDIN和STDOUT时, copy_expert()
确实支持发送自定义的COPY命令。 例如,它对于处理CSV很方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.