Python MySQLdb 문제 (TypeError : % d 형식 : str이 아닌 숫자가 필요함)
다음 삽입 작업을 수행하려고합니다.
cursor.execute("""
insert into tree (id,parent_id,level,description,code,start,end)
values (%d,%d,%d,%s,%s,%f,%f)
""", (1,1,1,'abc','def',1,1)
)
내 MYSQL 테이블의 구조는 다음과 같습니다.
id int(255),
parent_id int(255),
level int(11),
description varchar(255),
code varchar(255),
start decimal(25,4),
end decimal(25,4)
그러나 프로그램을 실행할 때 오류가 발생합니다.
"파일"/usr/lib/pymodules/python2.6/MySQLdb/cursors.py ", 151 행, 쿼리 실행 = query % db.literal (args)
유형 오류 : % d 형식 : str이 아닌 숫자가 필요합니다. "
형식 문자열은 실제로 일반적인 Python 형식 문자열이 아닙니다. 항상 %s
모든 필드에 사용해야 합니다.
공식 문서 참조 :
args가 목록 또는 튜플이면 % s를 쿼리에서 자리 표시 자로 사용할 수 있습니다 . args가 dict이면 % (name) s를 쿼리에서 자리 표시 자로 사용할 수 있습니다.
여기 -> 즉 %s
이다 포맷터하지 만, 자리 표시 자입니다
이 시도 :
cursor.execute("""
insert into tree (id,parent_id,level,description,code,start,end)
values (%s,%s,%s,'%s','%s',%s,%s)
"""%(1,1,1,'abc','def',1,1)
)
그의 데이터는 정수 또는 십진수 형식이므로 문자열 형식 % d 또는 % i에 일반적으로 사용되는 % s를 정수 또는 십진수 값으로 사용해야합니다.
이러한 유형의 오류를 볼 때마다 값 또는 변수의 유형을 확인하기 위해 type () 함수를 사용해야합니다 .... 유형은 'str'입니다. 파이썬이 문자열의 모든 값을 취함을 의미합니다 (기본 데이터 유형은 문자열 임). 그렇기 때문에 % d는 문자열이 아니라 숫자에 대한 오류입니다. 따라서 모든 유형의 필드에 대해 파이썬에서 % s를 고려하십시오.
동일한 오류가 발생했지만 다른 이유로 발생했습니다. 문제는 문자열에 '%'가 포함되어 있고 파이썬을 혼란스럽게 만들었다는 것입니다.
TemplateStr = '[....] % discount rate [....] %s and %s
print TemplateStr % ('abc', 'def')
파이썬은 "% 할인"을 "% d"로 해석하고 숫자가 아닌 문자열 ( 'abc')을 제공했기 때문에 계속 불평했습니다.
그것을 알아내는 데 긴 책이 필요했습니다!
(해결책은 % 대신 %%를 입력하는 것입니다.)
'IT박스' 카테고리의 다른 글
테이블에 행이 있는지 여부 확인 SQL Server 2005 (0) | 2020.12.07 |
---|---|
Javascript로 CKEditor에서 값을 어떻게 설정합니까? (0) | 2020.12.07 |
Git을 사용하면 무단계 변경으로 분기 변경 가능 (0) | 2020.12.07 |
역할이 존재하지 않으며 PostgreSQL을 사용할 때 데이터베이스를 만들 수 없습니다. (0) | 2020.12.07 |
자바 스크립트에서 내 Json에서 "를 제거하는 방법? (0) | 2020.12.07 |