2017-01-25 3 views
1

삽입 작업으로 임팔라 데이터베이스에 액세스하기 위해 Python 3.5.3을 사용했습니다. 다음과 같이 명령 :삽입 오류가있는 Python 액세스 임 플러

sql = "INSERT INTO user_tbl(ID, USER_IP)VALUES(?,?)" 
values = (89988, '3609:9802:480:77bd:434:2d9a:e204:47b0') 

cur.execute(sql, values); 

하지만 cur.execute("INSERT INTO user_tbl(ID, USER_IP)VALUES(89988, '3609:9802:480:77bd:434:2d9a:e204:47b0')")으로 실행하는 경우, 결과는 성공적이다.

오류가 Impyla 값 교체 포맷 %s, 또는 %(name)s

"impala.error.HiveServer2Error: AnalysisException: Syntax error in line 1:"

Encountered: STRING LITERAL Expected: CROSS, FROM, FULL, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, OFFSET,ON, ORDER, RIGHT, STRAIGHT_JOIN, UNION, USING, WHERE, COMMA

답변

0

이다.

그것은 'pyformat' 동일 impala.dbapi.paramstyle를 사용하고, 파이썬 DB-API 2.0 호환 that means 같이 :

Python extended format codes, e.g. ...WHERE name=%(name)s

함께 시도

values 인 경우합니다 ( %(name)s 형식을 사용할 수 있습니다
sql = "INSERT INTO user_tbl (ID, USER_IP) VALUES (%s, %s)" 
values = (89988, '3609:9802:480:77bd:434:2d9a:e204:47b0')  
cur.execute(sql, values) 

a tuple 대신 dict.

+0

나는 위의 명령을 시도 : sql = "INS values ​​= (89988, '3609 : 9802 : 480 : 77bd : 434 : 2d9a : e204 : 47b0') cur.execute (sql, values) user_tbl (ID, USER_IP) . 이전과 같이 보입니다. – leishton

+0

문제는 '3609 : 9802 : 480 : 77bd : 434 : 2d9a : e204 : 47b0'이며 IPv6 형식입니다. IPv4 또는 다른 형식으로 변경된 경우. 삽입이 성공할 것입니다. – leishton

+0

나는 그것을 impyla와 함께 버그로 제출하고 거기에서부터 갈 것이다. 나는 이것으로 잘못된 것을 직접 볼 수는 없으므로 아마도 impyla는 문자열을 벗어나는 이상한 일을하고있을 것입니다. – Evert