SQL 와일드카드 및 LIKE를 사용한 Python의 문자열 형식 지정
와일드카드가 있는 SQL 문을 Python 코드에 통합하는 데 어려움이 있습니까? 이 기사에서는 LIKE 키워드 및 와일드카드가 포함된 쿼리에 대해 Python 문자열 형식을 지정할 때 직면하는 일반적인 문제에 대한 솔루션을 제공합니다.
문제:
와일드카드와 함께 LIKE 키워드 사용 Python에서 MySQLdb를 사용하는 SQL 문에서는 문제가 있는 것으로 나타났습니다. Python의 형식 방법을 사용하여 문자열 형식을 지정하려는 다양한 시도로 인해 Python의 값 유효성 검사 또는 MySQLdb의 쿼리 실행에서 오류가 발생합니다.
잘못된 시도:
# Attempt 1: Value error due to unsupported escape sequence "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username LIKE '%%s%'" % (query) # Attempt 2: Returns same error as Attempt 1 "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username LIKE '\%%s\%'" % (query) # Attempt 3: Error from MySQLdb due to insufficient arguments in format string like = "LIKE '%" + str(query) + "%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username " + like # Attempt 4: Returns same error as Attempt 3 like = "LIKE '\%" + str(query) + "\%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username " + like
해결책:
이러한 형식화 문제를 해결하고 SQL이 문이 올바르게 실행되면 다음 접근 방식을 사용합니다.
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
이 예에서는 두 개의 인수가 excute() 메서드에 전달됩니다. 첫 번째 인수는 와일드카드 표현식에 대한 자리 표시자가 있는 형식화된 SQL 문자열입니다. 두 번째 인수는 백분율 기호가 접두어와 접미어로 붙은 와일드카드 표현식을 포함하는 튜플입니다. 이렇게 하면 검색 문자열의 양쪽 끝에 와일드카드가 적용됩니다.
이 방법을 활용하면 SQL 삽입 공격의 위험을 제거하고 형식 오류 없이 쿼리가 실행되도록 할 수 있습니다.
위 내용은 와일드카드를 사용하여 SQL LIKE 쿼리에 대한 Python 문자열 형식을 올바르게 지정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!