2017-01-03 97 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

可能您的select返回多于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