MySqlDb throws Операнд должен содержать 1 столбец (ы) в инструкции insert ignore

Рассматривая некоторые из методов websocket, которые предлагают предложения обмена пакетами, я хотел сохранить несколько точек данных в базе данных MySQL. Однако, когда я пытаюсь запустить команду executemany , я получаю следующую ошибку:

_mysql_exceptions.OperationalError: (1241, 'Operand should contain 1 column(s)')

Оглядываясь на SO, я нашел много примеров этой ошибки, но они касались удаления скобок в SELECT . Я не использую SELECT . Я пытаюсь INSERT .

Краткое, содержащееся, пример моего кода выглядит следующим образом:

 import MySQLdb as mdb db = mdb.connect(host='localhost',user='myuser',db='qs',passwd='mypass',use_unicode=True,charset='utf8') cur = db.cursor() db_qry = """INSERT IGNORE INTO questions (id, site_base, title, body_sum, tags, last_act_dt, url, owner_url, owner, api_site) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""" parms = [(u'mathematica.stackexchange.com', 43248, u'How to plot “Normalized distance” in this problem', u"Problem: there are two particles whose equationsof motion both satisfy -n Abs[x[t]]^n/x[t] == x''[t]. But their initial conditions are different: one is x'[0] == 0, x[0] == 2;another is x'[0] == 0, ...", [u'plotting', u'equation-solving', u'differential-equations', u'numerical-integration', u'notebooks'], 1393801095, u'http://mathematica.stackexchange.com/questions/43248/how-to-plot-normalized-distance-in-this-problem', u'http://mathematica.stackexchange.com/users/12706/lawerance', u'Lawerance', u'mathematica')] cur.executemany(db_qry, parms) cur.commit() 

Использую ли executemany неправильное исполнение? Или пропустить еще один аспект списка parms который мне нужно очистить, прежде чем перейти к executemany ?

  • Python MySQL управляет специальными символами
  • Как я могу наложить символ на целое число во время запроса в ORM django?
  • Как фильтровать (или заменять) символы Unicode, которые занимают более 3 байтов в UTF-8?
  • Когда закрывать курсоры с помощью MySQLdb
  • Контроль версий базы данных для MySQL
  • Django + MySQL на Mac OS 10.6.2 Snow Leopard
  • 2 Solutions collect form web for “MySqlDb throws Операнд должен содержать 1 столбец (ы) в инструкции insert ignore”

    Проблема заключалась в том, что данные вошли в столбец tags . Он пытался передать список вместо строки.

    Для образца в моем исходном вопросе я использовал этот код для преобразования его в строку.

    ','.join([u'plotting', u'equation-solving', u'differential-equations', u'numerical-integration', u'notebooks'])

    Следует также отметить, что я испортил свою строку фиксации. Это должно быть db.commit() не cur.commit()

    Я столкнулся с этой проблемой при попытке сохранить df с столбцом списков в mysql через pandas.DataFrame.to_sql который может автоматизировать некоторые из этих процессов. Вместо использования join я обычно конвертирую списки в закодированные строки, используя json.dumps() . Пакет json также позволяет легко загрузить его обратно в исходный формат с помощью json.loads() .

    В случае с исходным примером я бы превратил parms в dataframe

     parms = pd.DataFrame(parms) parms 0 1 \ 0 mathematica.stackexchange.com 43248 2 \ 0 How to plot “Normalized distance” ... 3 \ 0 Problem: there are two particles whose equatio... 4 5 \ 0 [plotting, equation-solving, differential-equa... 1393801095 6 \ 0 http://mathematica.stackexchange.com/questions... 7 8 9 0 http://mathematica.stackexchange.com/users/127... Lawerance mathematica 

    Затем преобразуйте столбец списков в строки json:

     parms[4] = parms[4].apply(json.dumps) parms 0 mathematica.stackexchange.com 43248 2 \ 0 How to plot “Normalized distance” ... 3 \ 0 Problem: there are two particles whose equatio... 4 5 \ 0 ["plotting", "equation-solving", "differential... 1393801095 6 \ 0 http://mathematica.stackexchange.com/questions... 7 8 9 0 http://mathematica.stackexchange.com/users/127... Lawerance mathematica 

    Запустите соединение MySQL (используя приведенную выше информацию):

     import sqlalchemy call = 'mysql+mysqldb://myuser:mypass@localhost:3306/qs' engine = sqlalchemy.create_engine(call) 

    Затем сбросьте его с помощью встроенной функции pandas:

     parms.to_sql('questions', engine, if_exists='append', chunksize=5000) 
    Python - лучший язык программирования в мире.