Python Psycopg метод исполняемого кода - PullRequest
0 голосов
/ 24 апреля 2018

реализация Python db-api для sqlite имеет удобный метод executetescript () для выполнения SQL-сценариев с несколькими операторами.Это очень полезно, например, для создания БД.См. документация по драйверу sqlite .

Я не могу найти аналогичный для драйвера Psycopg db-api для PostgreSQL.Существует ли executetescript () в Psycopg?Любая альтернатива?

Спасибо

1 Ответ

0 голосов
/ 24 апреля 2018

Вам это не нужно - одна строка запроса уже может содержать несколько отдельных запросов.

Цитирование из документация по протоколу проводного соединения , акцент добавлен:

Простой цикл запроса инициируется внешним интерфейсом, отправляющим сообщение запроса в серверную часть.Сообщение включает в себя команду SQL (или команды) , выраженную в виде текстовой строки.Затем серверная часть отправляет одно или несколько ответных сообщений в зависимости от содержимого командной строки запроса и, наконец, ответное сообщение ReadyForQuery.ReadyForQuery информирует интерфейс о том, что он может безопасно отправить новую команду.(На самом деле нет необходимости для внешнего интерфейса ждать ReadyForQuery перед выполнением другой команды, но затем внешний интерфейс должен взять на себя ответственность за выяснение того, что произойдет, если более ранняя команда завершится неудачно, а уже выпущенные более поздние команды будут успешными.)

... и более поздние версии:

Поскольку строка запроса может содержать несколько запросов (разделенных точками с запятой), может быть несколько таких последовательностей ответов, прежде чем серверная часть завершит обработку строки запроса. ReadyForQuery выдается, когда вся строка обработана и сервер готов принять новую строку запроса.


Таким образом, стандартному вызову cursor.execute() можно датьСписок отдельных запросов, разделенных точкой с запятой.

...