Ошибка программирования: неизвестный столбец «nan» в «списке полей» при подключении к MySQL через Python - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь записать данные из CSV-файла в базу данных MySQL.Во время выполнения моего кода я получаю следующий вывод: mysql.connector.errors.ProgrammingError: 1054 (42S22): неизвестный столбец 'nan' в 'списке полей'

add_sql = ("INSERT INTO db "
           "VALUES (%s, %s, %s, %s)")

def data_processor():
    df = (pandas.read_csv('data.csv').T)
    i = 0
    while i < (len(df.T['id'])):
        id = df[i]['id']
        name = df[i]['name']
        desc = df[i]['desc']
        link = df[i]['link']
        output = (id, name, desc, link)
        cursor.execute(add_sql, output)
        i = i + 1

data_processor()

IЯ новичок в программировании и действительно понятия не имею, что может быть причиной этого.Когда я ввожу данные вручную в строку add_sql, это работает, поэтому проблема должна быть в функции data_processor?

Мой python и mysql обновлены.Я много гуглил, искал здесь на stackoverflow и пытался внести различные изменения в мой код, но ничего не работает.Буду признателен за любую помощь: 3

Пример выходной переменной, которую я пытаюсь записать в базу данных.

(38, 'The legacy Iterator protocol', 'Firefox, prior to version 26 implemented another iterator protocol that is similar to the standard <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol">ES2015 Iterator protocol</a>.', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol')
(39, 'Expressions and operators', 'This chapter documents all the JavaScript language operators, expressions and keywords.', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators')
(40, 'Arithmetic operators', '<strong>Arithmetic operators</strong> take numerical values (either literals or variables) as their operands and return a single numerical value. The standard arithmetic operators are addition (+), subtraction (-), multiplication (*), and division (/).', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators')
(41, 'Array comprehensions', 'The <strong>array comprehension</strong> syntax was a JavaScript expression which allowed you to quickly assemble a new array based on an existing one. However, it has been removed from the standard and the Firefox implementation. Do not use it!', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions')
(42, 'Assignment operators', 'An <strong>assignment operator</strong> assigns a value to its left operand based on the value of its right operand.', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators')
(43, 'Bitwise operators', '<strong>Bitwise operators</strong> treat their operands as a sequence of 32 bits (zeroes and ones), rather than as decimal, hexadecimal, or octal <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number" title="/en-US/docs/JavaScript/Reference/Global_Objects/Number">numbers</a></code>. For example, the decimal number nine has a binary representation of 1001. Bitwise operators perform their operations on such binary representations, but they return standard JavaScript numerical values.', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators')
(44, 'Comma operator', 'The<strong> comma operator</strong> evaluates each of its operands (from left to right)\xa0and returns the value of the last operand.', 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator')

Это код SQL пустой таблицы I 'Я пытаюсь написать:

    CREATE TABLE `all` (
  `idall` int(11) NOT NULL,
  `name` text NOT NULL,
  `desc` text NOT NULL,
  `link` text NOT NULL,
  PRIMARY KEY (`idall`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci '

Все столбцы назначены не равными NULL, потому что я не ожидаю, чтобы у них были нули.Однако я попытался создать еще одну таблицу 'all2' в MySQL, которая точно такая же, но у всех 4 столбцов нет 'NOT NULL'.Все еще получал ту же ошибку при попытке написать.


Просто исправил это!

Мои данные - список статей изМДН про JavaScript.Несмотря на отсутствие пропущенных фрагментов данных, были названы 2 из 875 записей: NaN и null.В моем файле CSV они даже не были в кавычках, разделенных только запятыми.Я пытался использовать str (el) раньше, я думаю, что вместо 'NaN' он произвел ''.Помещение в нуль решило проблему!

1 Ответ

0 голосов
/ 08 февраля 2019

Эта ошибка отображается, потому что вы отправляете значение NaN в вашу базу данных.Пожалуйста, проверьте значения следующим образом.

import numpy as np
np.isnan(name)

Если вы на самом деле не заботитесь об этих NaN значениях, которые вы можете попытаться сделать:

df.fillna(0)

и замените 0 на все, что выкак.

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