Я пытаюсь создать небольшую базу данных, где пользователь может создать новую базу данных для хранения информации.
Я пытаюсь принять пользовательский ввод и запустить CREATE DATABASE, ЕСЛИ НЕ СУЩЕСТВУЕТ, однако мне кажется, что я столкнулся с проблемой, когда я получаю ошибку 1064 (42000).
В частности, он читает:
mysql.connector.errors.ProgrammingError: 1064 (42000): в синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования нового '' test_client '' в строке 1.
У меня есть отдельный класс, который называется build, который специально используется для созданиябаза данных или таблица по запросу пользователя.
Проблема в том, что у меня есть один метод кода, который работает, а другой - нет.Я пытаюсь узнать, что является причиной этой проблемы, поскольку я пытаюсь убедиться, что код защищен от любых SQL-инъекций.
Я пытался написать код двумя способами:
- Введенные пользователем данные хранятся в переменной с именем '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.