반응형
Python 2.5에서 SQLite3를 사용하여 목록을 반복하고 항목 이름을 기반으로 데이터베이스에서 항목의 가중치를 가져 오려고합니다.
"?"를 사용해 보았습니다. SQL 주입을 방지하기 위해 제안 된 매개 변수 대체가 작동하지 않습니다. 예를 들어 다음을 사용할 때 :
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
self.cursor.close()
오류가 발생합니다.
sqlite3.ProgrammingError : 잘못된 바인딩 수가 제공되었습니다. 현재 명령문은 1을 사용하고 8 개가 제공됩니다.
나는 이것이 어떻게 든 데이터베이스의 초기 생성으로 인한 것이라고 생각합니다. 실제로 DB를 생성하는 모듈에는 8 개의 바인딩이 있습니다.
cursor.execute("""CREATE TABLE Equipment
(id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER,
weight REAL,
info TEXT,
ammo_cap INTEGER,
availability_west TEXT,
availability_east TEXT)""")
그러나 각 항목 이름에 대해 덜 안전한 "% s"대체를 사용하면 잘 작동합니다. 이렇게 :
for item in self.inventory_names:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
self.cursor.close()
하나만 호출 할 때 8 개의 bindin이 있다고 생각하는 이유를 알 수 없습니다. 어떻게 고칠 수 있습니까?
해결 방법
Cursor.execute ()
메소드는 두 번째 매개 변수로 시퀀스를 예상합니다. 8 자 길이의 문자열을 제공하고 있습니다.
대신 다음 양식을 사용하십시오.
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
참조 페이지 https://stackoverflow.com/questions/228912
반응형
'파이썬' 카테고리의 다른 글
파이썬 트 위피 모듈에 위치 필터를 추가하는 방법 (0) | 2020.12.16 |
---|---|
파이썬 Flask self.errors.append ()-AttributeError : 'tuple'객체에 'append'속성이 없습니다. (0) | 2020.12.16 |
파이썬 함수는 어떻게 객체를 반환합니까? (0) | 2020.12.16 |
파이썬 PDF 파일에서 텍스트 및 텍스트 좌표를 추출하는 방법은 무엇입니까? (0) | 2020.12.16 |
파이썬 빈 배열에 대한 ValueError 극복 (0) | 2020.12.16 |
댓글