MAKAPOH
@MAKAPOH
многостаночник

Как правильно формировать запрос в MySQL ?

Добрый день.
Использую PyMySQL для подключения к БД. Непонятно как правильно передавать параметры в запрос, пишу так:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function
import pymysql as mysql

conn = mysql.connect(
    host='192.168.0.101',
    port=3306,
    user='login',
    passwd='password',
    # db='information_schema',
    charset='utf8'
)

print("paramstyle - {0}".format(mysql.paramstyle))
cursor = conn.cursor()
cursor.execute('CREATE DATABASE IF NOT EXISTS %s', ('ddd',))

Выхлоп:
paramstyle - format
pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''ddd'' at line 1")

Если последнюю строку заменить на:
cursor.execute('CREATE DATABASE IF NOT EXISTS ddd')

То БД создаётся. Похоже что дело в том что имя базы данных подставляется в кавычках, но что с этим делать непонятно. Подскажите как быть, что делать?
Обновление
Совет вместо запятой поставить знак % эквивалентен второму случаю когда я сам в строку запроса подставлю название БД. Но не забываем что в этом случае мы теряем автоматическое экранирование, чего не хочется. И в конце концов оно же должно так работать, или нет?
Обновление 2
Был получен ответ от разработчиков, из которого следует что запросы с обратными апострофами следует строить вручную.
  • Вопрос задан
  • 2512 просмотров
Решения вопроса 2
kai_zer_ru
@kai_zer_ru
Программист, разработка на python, golang, php
Если ставить запятую - то все параметры после неё будут обёрнуты в кавычки, и получатся двойные кавычки. Ставьте % и будет Вам счастье!
Ответ написан
loader777
@loader777
Python/django разработчик
Внутри execute же простая строка с форматированием. У вас небольшая ошибка - не хватает знака % после строки, перед переменной.
'CREATE DATABASE IF NOT EXISTS %s' % ('ddd',)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Не в том ли проблема, что в вашей строке
cursor.execute('CREATE DATABASE IF NOT EXISTS %s', ('ddd',))

перед конечными скобками запятая стоит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы