ошибка 1064 python для mysql

#python #mysql

#python #mysql

Вопрос:

У меня есть база данных имен и цен, которая обновляется ежедневно, когда я прогоняю ее через пакет кода и обновляю во второй базе данных все имена, пока не дойдет до ‘aapl’, после чего она выдает ошибку 1064, которая выглядит следующим образом

         -----------------------------------
Traceback (most recent call last):
  File "testrun.PY", line 45, in <module>
    t.Push.find_all(conn, cursor)
  File "c:tradetools.py", line 198, in find_all
    Push.find_streak(conn, cursor, name)
  File "c:tradetools.py", line 189, in find_strea
k
    .format(c, name))
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlcursors.py", line 166, in execute
    result = self._query(query)
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlcursors.py", line 322, in _query
    conn.query(q)
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlconnections.py", line 837, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlconnections.py", line 1021, in _read_query_result
    result.read()
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlconnections.py", line 1304, in read
    first_packet = self.connection._read_packet()
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlconnections.py", line 983, in _read_packet
    packet.check_error()
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlconnections.py", line 395, in check_error
    err.raise_mysql_exception(self._data)
  File "C:AppDataLocalProgramsPythonPython35libsite-packagesp
ymysqlerr.py", line 102, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1064, "42000You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version for the right sy
ntax to use near 'AAPL''' at line 1")

c:>
  

Код, который он выполняет, выглядит следующим образом, почему обновление добавляет больше запятых к имени appl?

 def find_streak(conn, cursor, name):
    print(name)
    cursor.execute("SELECT * FROM `trade_data`.`import_data`"
                   " WHERE name =%s;", name)
    logs = cursor.fetchall()
    cursor.execute("INSERT IGNORE INTO `trade_data`.`analysis`(`name`) "
               "VALUES (%s) ON DUPLICATE KEY UPDATE "
               "ndays=0;", name)
    conn.commit()
    logs = [list(x) for x in logs]
    logs.sort()
    ....
    cursor.execute ("UPDATE `trade_data`.`analysis` "
         "SET `ndays` = {0} WHERE name='{1}'"
         .format(c, name))
    conn.commit()
  

его извлечение из таблицы, которая выглядит следующим образом

     date|name|price|
  

и ввод в таблицу, которая

     date|name|result
  

Комментарии:

1. вы уверены в обратных ссылках? разве это не должны быть простые кавычки?

2. @alexce я имел в виду пролив UPDATE в вашем удаленном ответе на его первый запрос. Я даже видел нижний запрос. Несмотря на это, может показаться, что одинарные кавычки должны name заключаться в обоих запросах. Но код ошибки выглядит как дополнительные одинарные кавычки в конце. Схема таблицы была бы хороша в вопросе, как обычно

3. name Уже содержит одинарные кавычки?

4. рассматриваемое имя имеет одинарные кавычки, и ни одно из остальных не имеет, но если я удалю это имя и повторю его, оно сгенерирует имя с одинарными кавычками

5. таблицы, добавленные в op