繁体   English   中英

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

[英]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对象为高效的PostgreSQL COPY命令提供了一个接口( copy_to()copy_from()copy_expert() ),以将数据从文件移至表中以及移回表中。 当前,在COPY上的Python和PostgreSQL类型之间没有提供任何适应性:该文件可以是任何类似Python文件的对象,但是其格式必须为PostgreSQL COPY命令接受的格式(数据格式,转义字符等)。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM