728x90
반응형
문제점 및 증상
sqlalchemy + mysqlconnector 패키지를 이용하여 MariaDB를 연동하는 작업을 하던중에 갑작스럽게 다음과 같은 오류를 만나게 되었습니다.
File "C:\Dev\Python\Python38\lib\site-packages\mysql\connector\cursor.py", line 532, in execute
if not operation:
File "C:\Dev\Python\Python38\lib\site-packages\sqlalchemy\sql\elements.py", line 594, in __bool__
raise TypeError("Boolean value of this clause is not defined")
TypeError: Boolean value of this clause is not defined
실제 쿼리는 "INSERT INTO ..."를 하는 구문으로 되어 있었는데, HeidiSQL 등에서 해당 쿼리를 실행해 보면 정상적으로 잘 실행이 되나, 어떻게 수정을 하여도 파이썬에서는 위와 같은 오류가 발생하였습니다.
원인 분석
오전 내내 헤메이다가 오류가 발생한 소스를 직접 열어서 분석해 보았습니다.
elements.py 소스에서 오류가 발생한 부분은 다음과 같습니다.
def __bool__(self):
raise TypeError("Boolean value of this clause is not defined")
cursor.py 소스에서 오류가 발생한 부분은 다음과 같습니다.
if not operation:
return None
cursor.py 소스의 오류를 유발한 원인은 "cursor.execute(query)" 부분으로 정상적으로 실행이 되어야 하는데, 정상적으로 실행이 되지 않았습니다.
query = f"""
SELECT
addr_no
, addr_name
FROM ADDR_LEVEL2
WHERE 1 = 1
AND parent_addr_no = {addr_no}
"""
cursor.execute(query)
connection.commit()
query 객체가 "not" 연산 (bool())을 지원하지 않아서 발생한 오류인데, 문자열인데 왜 안될까? 한참을 고민했습니다.
해결 방안
결과적으로 아주 어이 없는 실수 때문에 발생한 오류였습니다.
다른 곳의 소스를 복사하는 과정에서 import 구분에 다음 부분이 추가되어 있었습니다.
from sqlalchemy import text
위 구문이 추가 되어 있음으로 인하여, 일반 문자열이 text로 변경되면서 "TypeError: Boolean value of this clause is not defined" 오류가 발생한 것이었습니다.
위 import 구문을 제거하였더니, 모든 쿼리가 정상적으로 호출되었습니다.
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 이진 파일로부터 int array 읽어 들이는 3가지 방법 성능 비교 (0) | 2021.04.29 |
---|---|
[Python] 이진 파일로부터 int array 읽어 들이는 3가지 방법들 (0) | 2021.04.28 |
파이썬의 장점 / 단점 (0) | 2021.04.21 |
문자열을 날짜로 변환하는 방법 (0) | 2021.04.17 |
[Python] os.mkdir() 폴더 생성시, "FileNotFoundError: [WinError 3] 지정된 경로를 찾을 수 없습니다" 오류 대처 (0) | 2021.04.09 |