Как взять имя таблицы из пользовательского ввода в flask? - PullRequest
0 голосов
/ 20 апреля 2020
@app.route("/CreateAScheme",methods=['GET','POST'])
def CreateAScheme():
    if request.method == 'POST':
         userDetails = request.form
         Scheme = userDetails['Scheme']
         con = MySQL.connection.cursor()
         con.execute("CREATE TABLE %s (id int NOT NULL AUTO_INCREMENT, Course varchar(255) NOT NULL, Year varchar(255), PRIMARY KEY(id));",(Scheme))
         MySQL.connection.commit()
         con.close()
         flash("Succesfully Created")
         return "Succesfully"
    return render_template('index.html')

Я получаю сообщение об ошибке "не все аргументы преобразованы во время форматирования строки"

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Простая упаковка переменной в скобках, как вы делаете в (Scheme), ничего не делает.

.execute() ожидает кортеж параметра, независимо от того, является ли он просто 1-кортежом, то есть (Scheme,) :

con.execute(
  "CREATE TABLE %s (id int NOT NULL AUTO_INCREMENT, Course varchar(255) NOT NULL, Year varchar(255), PRIMARY KEY(id));",
  (Scheme,)
)
0 голосов
/ 20 апреля 2020
con.execute("CREATE TABLE %s (id int NOT NULL AUTO_INCREMENT, Course varchar(255) NOT NULL, Year varchar(255), PRIMARY KEY(id));" %(Scheme))

"Просто используйте регулярную интерполяцию%"

Спасибо @ AKX

...