Строка формата Python для обновления MySQL - PullRequest
0 голосов
/ 18 июня 2020

Я давний Perl программист, пытающийся подобрать Python из-за некоторых потребностей НЛП. Так что это, вероятно, глупый вопрос для новичков.

Я пытаюсь получить текст из MySQL, использую spaCy для подсчета типов сущностей в словаре, а затем обновляю запись DB с помощью JSON версии словаря. Все работает отлично, пока я не дойду до последнего шага. Код следующий:

import spacy
nlp = spacy.load("en_core_web_sm")
import json
import mysql.connector
mydb = mysql.connector.connect(
  [redacted]
)
mycursor = mydb.cursor()
nrows = mycursor.execute("select id,message from post where entities is null")
while True:
    row = mycursor.fetchone()
    ne_types = {}
    if row == None:
        break
    doc = nlp(row[1])
    for ent in doc.ents:
        if ent.label_ not in ne_types:
            ne_types[ent.label_] = 0
        ne_types[ent.label_] += 1

    sql = "update post set entities = '",json.dumps(ne_types),"' where id = ",row[0]
    mycursor.execute(sql)
    mydb.commit()  

Когда я прерываю оператор mycursor.execute, мой отладчик говорит, что sql - это кортеж. Хм, звучит не так. Когда я пытаюсь выполнить, я получаю сообщение об ошибке

Traceback (most recent call last):
  File "C:\named-ent.py", line 29, in <module>
    mycursor.execute(sql)
  File "c:\python36\lib\site-packages\mysql\connector\cursor_cext.py", line 234, in execute
    self._cnx.handle_unread_result()
  File "c:\python36\lib\site-packages\mysql\connector\connection_cext.py", line 712, in handle_unread_result
    raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found

Так что это действительно неправильно (хотя я не могу понять это сообщение об ошибке). Как правильно построить строку sql?

ОБНОВЛЕНИЕ Я попробовал предложение Ника изменить код следующим образом:

mycursor.execute("update post set entities = %s where id = %s", (json.dumps(ne_types), row[0]))

и все еще получаю сообщение об ошибке:

Traceback (most recent call last):
  File "C:\named-ent.py", line 28, in <module>
    mycursor.execute("update post set entities = %s where id = %s", (json.dumps(ne_types), row[0]))
  File "c:\python36\lib\site-packages\mysql\connector\cursor_cext.py", line 234, in execute
    self._cnx.handle_unread_result()
  File "c:\python36\lib\site-packages\mysql\connector\connection_cext.py", line 712, in handle_unread_result
    raise errors.InternalError("Unread result found")
mysql.connector.errors.InternalError: Unread result found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...