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
'programing' 카테고리의 다른 글
JavaScript 약속 - 거부 vs. throw (0) | 2023.01.12 |
---|---|
Java 프로젝트의 Vagrant: VM에서 컴파일할 것인가, 아니면 호스트에서 컴파일할 것인가? (0) | 2023.01.01 |
explicit_defaults_for_timestamp를 활성화하려면 어떻게 해야 합니까? (0) | 2023.01.01 |
INSER JOIN / LEFT JOIN 우선순위 및 그룹 강제 적용 (0) | 2023.01.01 |
SQL을 사용하여 json 데이터 목록 필드를 열로 변환 (0) | 2023.01.01 |