I DB에 데이터를 밀어 다음 파이썬 코드가 있습니다파이썬 % s 형식 지정자
cursor.execute("INSERT INTO "+ DATA_TABLE + """ (fk_id, title, streetaddress,json)
values (%(fk_id)s, %(title)s, %(address)s, %(json)s) """ ,(
result))
을하지만 오류 얻을 : 그것은 때문에
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 185, in unicode_literal
return db.literal(u.encode(unicode_literal.charset))
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)
인가를 % s는 dict이 utf-8 문자열을 제공하는 동안 값이 유효한 라틴 -1 문자열이 될 것으로 예상합니까? 깨끗한 해결 방법은 무엇입니까?
참고 : json은 json.dumps
을 사용하여 안전하게 만들어집니다. 그것은 여러 언어의 여러 문자가 있습니다.
-1 : 이와 같은 SQL 문을 작성하지 마십시오. "Little Bobby Tables"에 대한 Google –
@ S.Lott : 'DATA_TABLE' 변수가 사용자 입력에서 온 것이 아니라고 가정하면이 코드는 SQL 주입에 취약하지 않습니다. –
@ 루크 우드워드 : 귀하의 가정은 종종 사실이지만, 그것이 사실이 아닌 때가 치명적입니다. 또한 이와 같은 SQL을 구축하는 것은 비효율적입니다. API에서 올바른 값 바인딩을 사용한다는 것은 RDBMS 백엔드가 값이 바인딩되는 단일 표준 쿼리와 함께 작동한다는 것을 의미합니다. 이렇게하면 구문 분석 시간이 절약되고 성능을 획기적으로 향상시킬 수 있습니다. –