ProgrammingError: неверное количество аргументов при форматировании строки, попытка исправить кортеж - PullRequest
0 голосов
/ 17 марта 2020

поэтому после создания таблицы, а затем вызова insert в, я получаю сообщение об ошибке, указывающее неправильное количество аргументов во время форматирования строки. Я попытался найти проблему, в которой говорится, что второй параметр должен быть кортежем, но безуспешно. Не уверен, почему я все еще получаю эту ошибку. Значения переменных, которые я

Создать функцию:

table_ddl = "CREATE TABLE movies (id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255), year VARCHAR(255), director VARCHAR(255), actor VARCHAR(255), release_date VARCHAR(255), rating VARCHAR(255))"

cnx = ''
try:
    cnx = mysql.connector.connect(user=username, password=password,
                                  host=hostname,
                                  database=db)
except Exception as exp:
    print(exp)
    import MySQLdb
    #try:
    cnx = MySQLdb.connect(unix_socket=hostname, user=username, passwd=password, db=db)
    #except Exception as exp1:
    #    print(exp1)

cur = cnx.cursor()

try:
    cur.execute(table_ddl)
    cnx.commit()
    populate_data()
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
        print("already exists.")
    else:
        print(err.msg)

Вставить функцию: заголовок, год и т. Д. c взять из html запросов

def add_to_db():
    print("Received request.")
    title = request.form['title']
    year = request.form['year']
    director = request.form['director']
    actor = request.form['actor']
    release_date = request.form['release_date']
    rating = request.form['rating']
    db, username, password, hostname = get_db_creds()

    cnx = ''
    try:
        cnx = mysql.connector.connect(user=username, password=password,
                                      host=hostname,
                                      database=db)
    except Exception as exp:
        print(exp)
        import MySQLdb
        cnx = MySQLdb.connect(unix_socket=hostname, user=username, passwd=password, db=db)

    cur = cnx.cursor()
    sql = "INSERT INTO movies (title,year,director,actor,release_date,rating) VALUES (%s,%d,%s,%s,%s,%f)"
    val = [title,year,actor,director,release_date,rating]
    cur.execute(sql,val) # line with error
    cnx.commit()
    return hello()

HTML Код

<form action="add_to_db" method="post">
  <h4>Insert Movie</h4>
  <br>
  Year: <input type="text" name="year"><br>
  Title: <input type="text" name="title"><br>
  Director: <input type="text" name="director"><br>
  Actor: <input type="text" name="actor"><br>
  Release Date: <input type="text" name="release_date"><br>
  Rating: <input type="text" name="rating"><br>
  <input type="submit" value="Insert Movie">
</form>

1 Ответ

0 голосов
/ 17 марта 2020

Заполнители, используемые cursor.execute(), не являются % операторами форматирования общего назначения. Вы можете использовать только %s, а не %d и %f. Что касается cursor.execute(), вы предоставили только 4 заполнителя для 6 параметров.

Так должно быть:

sql = "INSERT INTO movies (title,year,director,actor,release_date,rating) VALUES (%s,%s,%s,%s,%s,%s)"

Из документации :

Если args является списком или кортежем, %s может использоваться в качестве заполнителя в запросе. Если args является диктом, %(name)s может использоваться в качестве заполнителя в запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...