LINUX.ORG.RU

Как заставить python3 выполнить содержимое sql файла?

 


0

2

Делаю вот так:

import os
from mysql.connector import connect, Error

MYSQL_PASSWORD = os.environ.get("MYSQL_ROOT_PASSWORD")

try:
    cnx = connect(user="root", password=MYSQL_PASSWORD, host="mysql")
    with open('bootstrap.sql', 'r') as sql:
        with cnx.cursor() as cursor:
            cursor.execute(sql.read(), multi=True)
        cnx.commit()
except Error as err:
    print("Error: " + err)
    exit(1)

Сам sql простой:

CREATE DATABASE IF NOT EXISTS db1 character set utf8 collate utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db2 character set utf8 collate utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db3 character set utf8 collate utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db4 character set utf8 collate utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db5 character set utf8 collate utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db6 character set utf8 collate utf8_general_ci;
CREATE DATABASE IF NOT EXISTS db7 character set utf8 collate utf8_general_ci;
CREATE USER IF NOT EXISTS `user%`@`%` IDENTIFIED BY 'password';
GRANT SELECT,INSERT,UPDATE ON db1.* TO `user%`@`%`;
GRANT SELECT,INSERT,UPDATE ON db2.* TO `user%`@`%`;
GRANT SELECT,INSERT,UPDATE ON db3.* TO `user%`@`%`;
GRANT SELECT,INSERT,UPDATE ON db4.* TO `user%`@`%`;
GRANT SELECT,INSERT,UPDATE ON db5.* TO `user%`@`%`;
GRANT SELECT,INSERT,UPDATE ON db6.* TO `user%`@`%`;
GRANT SELECT,INSERT,UPDATE ON db7.* TO `user%`@`%`;

В итоге скрипт просто выходит с нулём и ничего не делает. Понять не могу что не так.


  with open('bootstrap.sql', 'r') as sql:
       with cnx.cursor() as cursor:

Можно в одну строчку через запятую:

with open('bootstrap.sql', 'r') as sql, cnx.cursor() as cursor:
eternal_sorrow ★★★★★ ()
Ответ на: комментарий от qaqa

это сиквел, к вопросу отношения не имеет. но проверить не помешает, что выдает mysql -p < file.sql ?

Anoxemian ★★★★★ ()
Ответ на: комментарий от pup_kin

Рабы жидбрейнса говорят, что отладочный вывод — зло, особенно в сторонних библиотеках, валяющихся в кэше pip, и следует использовать отладчик. Да не какой-нибудь, конечно, а встроенный в их б-жественный PyCharm. А иначе серьёзные заказчики засмеют. Бессовестно врут?

anonymous ()
Ответ на: комментарий от anonymous

Потому что контекст-менеджеры збс, и к with в js это отношения не имеет.

WitcherGeralt ★★ ()
Ответ на: комментарий от u0000

Но ты же и не пытался её решить. Проитерируйся по возвращаемому из cursor.execute значению.

WitcherGeralt ★★ ()

Выведи в консоль то, что тебе cursor.execute возвращает, зачем гадать?

theNamelessOne ★★★★★ ()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от anonymous

Анон, как это обычно и бывает, затащил. Моё почтение :)

anonymous ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей