Создание базы данных MySQL из Python 2.7
Естественно, с соответствующими правами
basename='testdb'
cursor.execute("CREATE DATABASE IF NOT EXISTS %s;",basename)
В недрах MySqlDb это порождает запрос вида
, который MySQL не понимает.
"CREATE DATABASE IF NOT EXISTS \\'testdb\\';"
С MySQLdb не работал (предпочитаю SQLA но полагаю, что в данном случае надо cursor.execute("CREATE DATABASE IF NOT EXISTS %s;"%basename)
%sПитон не умеет в плейсхолдеры?
Однако почему запрос не выполняется пока не понятно. Нужно больше информации, какую именно ошибку возвращает MySQL server.
[телепат-моде]Может данному пользователю не достаточно прав на CREATE DATABASE?[/telepat-mode]
stackoverflow.
Имя базы без кавычек (отсутствие ; в конце запроса опустим, его наличие движок должен съесть). А у ТС двойной эскейпинг строки на выходе приготовлен.
Я предположил, что эскейпинг (в зависимости от типа) необходим, чтобы вносить строковые и не строковые значения уже в саму базу.
Просто я опирался на ответ в
db1 = MS.connect(host="localhost",user="root",passwd="****")
cursor = db1.cursor
sql = 'CREATE DATABASE mydata'
cursor.execute(sql)
Имя базы без кавычек (отсутствие ; в конце запроса опустим, его наличие движок должен съесть). А у ТС двойной эскейпинг строки на выходе приготовлен.
Я предположил, что эскейпинг (в зависимости от типа) необходим, чтобы вносить строковые и не строковые значения уже в саму базу.
cursor.execute(
"""INSERT INTO breakfast (name, spam, price)
VALUES (%s, %s, %s)""""Spam Plate", 5, 7.95 )
)
SET @db = %s;
SET @statement = CONCAT('CREATE DATABASE ', @db);
PREPARE prepared_statement FROM @statement;
EXECUTE prepared_statement;
Так что твой первый коммент про cursor.execute(statement) должно работать. Где statement - уже полностью подготовленная строка с названием базы данных без кавычек.
Оставить комментарий
5065584
Я знаю, что базой данных MySQL можно управлять из программы на Питоне посредством модуля MySQLDb. Но это предполагает, что база данных уже создана. А можно ли именно СОЗДАТЬ базу данных из Питона?