2017-01-03 2 views
0

Получения внутренней ошибки при выполнении этого кодаInternalError: (1242, 'подзапрос возвращает более чем на 1 строку')

conn = pymysql.connect(user = 'root', password = '', unix_socket = "/tmp/mysql.sock", database = 'abc') 
cursor = conn.cursor() 
query2 = """INSERT INTO paragraphVector (termId, termFreq, kgram) VALUES ((SELECT termId FROM term WHERE term = %s AND kgram = %s), %s, %s)""" 

insertDocVec = [(str(term), str(kgram), tf[kgram][term], str(kgram)) for kgram in tf for term in tf[kgram]] 
cursor.executemany(query2, insertDocVec) 
conn.commit() 
+0

Возможно, ваш выбор возвращает более 1 строки, и это является причиной сообщения об ошибке. Вы можете изменить синтаксис на «insert ... select ...» – Shadow

ответ

1

Изменить это:

INSERT INTO paragraphVector (termId, termFreq, kgram) VALUES ((SELECT termId FROM term WHERE term = %s AND kgram = %s), %s, %s) 

к этому:

INSERT INTO paragraphVector (termId, termFreq, kgram) SELECT termId, %s, %s FROM term WHERE term = %s AND kgram = %s 

и переместить последние два параметра в левое поле

+0

после изменения. Я получаю еще одну внутреннюю ошибку: InternalError: (1292, «Усеченное неправильное значение DOUBLE:« lawson ») –

+0

Возможно, потому что цель Недостаточно точности столбца для хранения данного значения. – GurV

0

Ваше заявление неверно. Попробуйте:

INSERT INTO paragraphVector (termId, termFreq, kgram) 

SELECT termId , %s, %s 

FROM term WHERE term = %s AND kgram = %s 
Смежные вопросы