복붙노트

[PYTHON] "% s"% 형식과 "{0}". format () vs "?"형식

PYTHON

"% s"% 형식과 "{0}". format () vs "?"형식

SQLite에 대한이 게시물에서 aaronasterling은

그러나 나는 첫 번째와 두 번째가 같다고 생각했습니다. 이 세 가지의 차이점은 무엇입니까?

해결법

  1. ==============================

    1.

    "attach \"%s\" as toMerge" % "b.db"
    

    대신 '대신'을 사용해야하므로 탈출 할 필요가 없습니다.

    사용되지 않는 이전 형식 지정 문자열을 사용했습니다.

    'attach "{0}" as toMerge'.format("b.db")
    

    가능한 경우 이전 버전 대신 사용해야하는 최신 Python 버전의 새로운 형식 문자열 기능을 사용합니다.

    "attach ? as toMerge"; cursor.execute(cmd, ('b.db', ))
    

    이것은 문자열 형식을 완전히 생략하고 대신 SQLite 기능을 사용하므로 올바른 방법입니다.

    큰 장점 : SQL 주입 위험 없음

  2. ==============================

    2.첫 번째와 두 번째 결과는 똑같지 만 두 번째 방법은 새로운 버전의 Python에서 문자열을 형식화하는 데 선호됩니다.

    첫 번째와 두 번째 결과는 똑같지 만 두 번째 방법은 새로운 버전의 Python에서 문자열을 형식화하는 데 선호됩니다.

    그러나 세 번째 방법은 문자열을 조작하는 대신 매개 변수를 사용하기 때문에 더 나은 방법입니다. 이것은 더 빠르고 안전합니다.

  3. ==============================

    3.왜냐하면 그것은 도망 가지 않기 때문입니다. b.db를 사용자 입력으로 바꾼 경우 SQL 주입에 취약하게됩니다.

    왜냐하면 그것은 도망 가지 않기 때문입니다. b.db를 사용자 입력으로 바꾼 경우 SQL 주입에 취약하게됩니다.

  4. from https://stackoverflow.com/questions/3691975/s-format-vs-0-format-vs-format by cc-by-sa and MIT license