Ошибка Python 1064 на MySQL коннекторе Создать заявление - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать небольшую базу данных, где пользователь может создать новую базу данных для хранения информации.

Я пытаюсь принять пользовательский ввод и запустить CREATE DATABASE, ЕСЛИ НЕ СУЩЕСТВУЕТ, однако мне кажется, что я столкнулся с проблемой, когда я получаю ошибку 1064 (42000).

В частности, он читает:

mysql.connector.errors.ProgrammingError: 1064 (42000): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования нового '' test_client '' в строке 1.

У меня есть отдельный класс, который называется build, который специально используется для созданиябаза данных или таблица по запросу пользователя.

Проблема в том, что у меня есть один метод кода, который работает, а другой - нет.Я пытаюсь узнать, что является причиной этой проблемы, поскольку я пытаюсь убедиться, что код защищен от любых SQL-инъекций.

Я пытался написать код двумя способами:

  1. Введенные пользователем данные хранятся в переменной с именем 'name'.У меня есть кусок кода, который добавляет «_», если в имени есть пробелы.У меня есть переменная (называется sqlFormula), которая содержит код: они оба затем запускаются в mycursor.execute.И здесь я получаю ошибку.

Код:

    name = re.sub("\s+", "_", name)
    sqlFormula = ("""CREATE DATABASE IF NOT EXISTS %s""")
    mycursor.execute(sqlFormula, (name,))

Эта версия выдает ошибку.

Второй способ, который работает, состоит в следующем:

    name =  = re.sub("\s+", "_", name)
    sqlFormula = """CREATE DATABASE IF NOT EXISTS %s"""%name
    mycursor.execute(sqlFormula)

Это не приводит к ошибке.

Ниже приведены частичные коды, которые используются в этой части:

class Build():
    __slots__ = ['userentry', 'database']

    def __init__ (self, used_database, user_entry = None)
        self.database = used_database
        self.userentry = user_entry

    def create_database (self)
        mycursor = self.database.cursor()
        name = re.sub("\s+", "_", name)
        sqlFormula = ("""CREATE DATABASE IF NOT EXISTS %s""")
        mycursor.execute(sqlFormula, (name,))
        mycursor.close()

class Create()
    def Create_table():
        user_input = input("What is the name of the database to create?")
        #a separate variable called db is used to house the db connection.
        Build(db, user_input).create_database()


I expected that by using the variable name in a tuple and the %s placeholder, that it would work without any problem. However I just keep getting the error.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...