Ошибка: «Не все параметры использовались в инструкции SQL» Вставьте и обновите в mariadb, используя Python - PullRequest
0 голосов
/ 25 мая 2020

Я вставляю записи в таблицу maria db из файла, используя python. Входной файл имеет заголовок. Некоторые столбцы полностью или частично пусты. Я пытаюсь ввести код ниже -

Определение таблицы -

CREATE TABLE `local_db`.`table_x` (
  `Unique_code` varchar(50) NOT NULL,
  `city` varchar(200) DEFAULT NULL,
  `state` varchar(50) DEFAULT NULL,
  `population` bigint(20) DEFAULT NULL,
  `Govt` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
input_file = "C:\\Users\\input_file.csv"
csv_data = csv.reader(open(input_file))
try:
    connection = mysql.connector.connect(host='localhost',
                                         database='local_db',
                                         user='root',
                                         password='root',
                                         port = '3306')


    cursor = connection.cursor()
    for row in csv_data:
        sql = """
        INSERT INTO table_x(Unique_code,city,state,population,Govt) \
        VALUES(?, ?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE city = VALUES(city),state = VALUES(state), \
        population = VALUES(population),Govt = VALUES(Govt)"""
        cursor.execute(sql, row)
    connection.commit()
    print(cursor.rowcount, "Record inserted successfully into table_x")
    cursor.close()

except mysql.connector.Error as error:
    print("Failed to insert record into table_x table {}".format(error))



finally:
    if (connection.is_connected()):
        connection.close()
        print("MySQL connection is closed")

Но я получаю ошибку ниже -

Failed to insert record into table_x table Not all parameters were used in the SQL statement
MySQL connection is closed

Пожалуйста, предложите, какие изменения кода я могу сделайте здесь, чтобы справиться с этой ситуацией.

1 Ответ

1 голос
/ 25 мая 2020

Возможно, вам будет удобно набрать pip install sqlalchemy, а затем назначить sql = sqlalchemy.Table("""INSERT ..."""). Тогда синтаксис кавычек для параметров связывания определенно будет выглядеть следующим образом:

... VALUES(:Unique_code,
           :city,
           :state,
           :population,
           :Govt) ...

Получение ввода с помощью dict reader также может оказаться удобным.

Используемый синтаксис параметров связывания по вашему опубликованному коду может выглядеть так:

... VALUES(%(Unique_code)s,
           %(city)s,
           %(state)s,
           %(population)s,
           %(Govt)s) ...

В CREATE TABLE отсутствует ПЕРВИЧНЫЙ КЛЮЧ, поэтому вам, вероятно, следует повысить этот исходный столбец Unique_code до PK.

Поскольку опубликованный в схеме не применяются какие-либо уникальные ключи, ON DUPLICATE KEY можно удалить без изменения поведения. Тогда у вас будет более простой оператор INSERT, о котором нужно беспокоиться во время отладки.

...