PyMySQL не может выполнить несколько запросов - PullRequest
0 голосов
/ 24 октября 2019

Использование последней версии PyMySQL (0.9.3) Я не могу выполнить строку запроса, содержащую несколько операторов SQL, разделенных точкой с запятой (;)

Моя версия Python: Python 3.6. 5

import pymysql # version 0.9.3
conn = {
    "host": "mysql_server_hostname",
    "password": "my_password",
    "port": <<port_no>>,
    "user": "my_username"
}

my_query_str = 'show databases;use random_existing_db;'
with pymysql.connect(**conn):
    cur.execute(query)

Возникла ошибка: (1064, «В одном запросе обнаружено несколько операторов)

Попытка выполнить тот же запрос с PyMySQL-0.7.11 иработы

1 Ответ

0 голосов
/ 25 октября 2019

В pymysql версии 0.8 и выше флаг клиента больше не устанавливается по умолчанию. Для выполнения нескольких операторов необходимо передать client_flag = CLIENT.MULTI_STATEMENTS.

ссылка: https://github.com/PyMySQL/PyMySQL/blob/v0.9.3/CHANGELOG#L66

Пример исправления ниже.

import pymysql
from pymysql.constants import CLIENT

conn = {
    "host": "mysql_server_hostname",
    "password": "my_password",
    "port": <<port_no>>,
    "user": "my_username",
    "client_flag": CLIENT.MULTI_STATEMENTS
}

my_query_str = 'show databases;use random_existing_db;'
with pymysql.connect(**conn) as cur:
    cur.execute(my_query_str)
...