programing

Python: ValueError: 인덱스 1에서 지원되지 않는 형식 문자 ''(0x27)

bestcode 2023. 1. 1. 11:13
반응형

Python: ValueError: 인덱스 1에서 지원되지 않는 형식 문자 ''(0x27)

파이썬을 통해 MySQL을 사용하여 데이터베이스에서 3개의 테이블을 검색하기 위한 쿼리를 실행하려고 합니다.다음 문자열을 쿼리로 실행하려고 할 때마다 문자열 연결에 대한 오류가 나타납니다.

"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"

다음 오류가 나타납니다.

ValueError: unsupported format character ''' (0x27) at index 1

요구하는 문자를 삭제하면 %도 삭제해야 합니다.이것에 의해, 쿼리가 실제로 정상적으로 동작하지 않게 됩니다.Python은 처음인데 어떻게 하면 고칠 수 있을까요?

고마워, 크리스

python이 %를 printf 형식 문자로 해석하고 있는 것 같습니다.%% 사용하시겠습니까?

"SELECT fileid 
FROM files 
WHERE description LIKE '%%%s%%' 
    OR filename LIKE '%%%s%%' 
    OR uploader LIKE '%%%s%%' 
    ORDER BY fileid DESC" % (search, search, search)

참고로 오늘 Python 3.6에서 @Pochi의 솔루션을 시도했는데, 어떤 이유로 인해 예상치 못한 동작이 발생하였습니다.형식 문자열에 대해 두 개의 인수와 세 개의 인수가 있었기 때문에 마지막은 다음과 같습니다.

% (Search, Search)

문자열("검색")은 상위 "S"로 시작합니다.에러 메세지가 표시되었습니다.

ValueError: unsupported format character 'S' (0x53) at index 113

대문자를 소문자로 변경했더니 다음 오류가 발생했습니다.

TypeError: not enough arguments for format string

그리고 처음과 끝에 내 주장을 두 배 % 안에 넣었더니 효과가 있었다.내 코드는 다음과 같습니다.

"SELECT fileid 
FROM files 
WHERE description LIKE '%%search%%' 
    OR filename LIKE '%%search%%'
    ORDER BY fileid DESC"

또 다른 해결책은 @Alice Yuan이 제공하는 것입니다.노래의 비율을 두 배로 늘렸고 효과가 있었어요

솔루션:

query = """SELECT id, name FROM provice WHERE name LIKE %s"""
cursor.execute(query, '%%%s%%' % name)

이 문제는 쉽게 해결할 수 있을 것 같아요!

다음과 같이 시도할 수 있습니다.

SELECT fileid 
FROM files 
WHERE description LIKE '%%%%%s%%%%' 
OR filename LIKE '%%%%%s%%%%' 
OR uploader LIKE '%%%%%s%%%%' 
ORDER BY fileid DESC" % (search, search, search)

가장 간단한 답은 LIKE 와일드카드 문자를 추가하는 것입니다.%가치를 높입니다.그러면 LIKE 패턴이 올바르게 인용되어 이스케이프됩니다.

Python 3.6+에서는 f-string을 사용하여 LIKE 와일드카드 문자를 포함할 수 있습니다.%SQL에 이스케이프된 문자열 값을 올바르게 삽입하는 값:

# string to find, e.g.,
search = 'find-me'

# Parameterised SQL template
sql = """SELECT fileid FROM files
WHERE description LIKE %s OR filename LIKE %s OR uploader LIKE %s
ORDER BY fileid DESC"""

# Combine LIKE wildcard with search value
like_val = f'%{search}%'

# Run query with correctly quoted and escaped LIKE pattern
cursor.execute(sql, (like_val, like_val, like_val))

언급URL : https://stackoverflow.com/questions/11695801/python-valueerror-unsupported-format-character-0x27-at-index-1

반응형