-
(SQL) python에서 table, column, value에 적합한 parameter placeholderIT 지식 창고 2020. 12. 3. 18:55
python에서 values는 적절한 parameter placeholder를 사용할 수 있는데, table과 columns 같은 경우에는 없는 것 같다고 생각이 들 수 있습니다.
그 사실이 맞습니다. Mysql 공식문서에서는 사용할 수 없다고 이야기 합니다.
Parameter placholders는 오직 열에 해당하는 값에만 사용할 수 있으며, 테이블 이름, 명령어 등 다른 SQL문에는 사용할 수 없습니다. mysql-python.sourceforge.net/MySQLdb.html
MySQLdb User's Guide
If you want to write applications which are portable across databases, use MySQLdb, and avoid using this module directly. _mysql provides an interface which mostly implements the MySQL C API. For more information, see the MySQL documentation. The documenta
mysql-python.sourceforge.net
이유는 아래와 같습니다.
columns = ("column1", "column2") query = "INSERT INTO TABLE {} VALUES ("VALUE")".format(columns) cursor.execute(query)
위와 같이 column을 넘기면,
INSERT INTO TABLE "column1" "column2" VALUES ~~과 같은 방식으로 column이 string인 "" 또는 ''로 인식되서 SQL문이 제대로 인식되지 않습니다.
values와 같은 경우는 ""와 같은 string으로 인식되어야만 사용이 가능한 부분이라 column을 넘기는 것과는 조금 다릅니다.
현재 postgresql에서도 똑같이 사용할 수 없으며, 제가 실험해본 결과 사용할 수 있는 경우는 복수가아닌 단수의 개수일 경우는 억지로(?) 가능합니다.
python에서 요구되는 query문
cursor.execute("INSERT INTO TABLE (COLUMN) VALUES ("VALUE")")
단수로 parameter placeholder를 사용할 경우
query = "INSERT INTO {TABLE} ({COLUMN}) VALUES ({VALUE})".format("table", "column", "value") cursor.execute(query)
위와 같은 경우는 사용가능합니다.
각각 어떤 차이인지 아시겠나요?
단수로 string만 전달할 경우 ""와 같은 string으로 전달되는 것이 아닌 단어만 전달이 되고, COLUMN은 ()로 감싸주면서 전달하면 Python에서 요구하는 query문 형태로 출력되기 때문에 사용이 가능합니다.
그 외는,, 해당하는 table과 column은 직접 명시해서 사용해야겠지요...
'IT 지식 창고' 카테고리의 다른 글
(keras) categorical_crossentropy vs sparse_categorical_crossentropy (0) 2020.12.08 (Python) from test import *사용 시 main에서 import 추가 없이 사용 (0) 2020.12.08 (Keras) keras segmentation model API (0) 2020.11.24 (IDE) ctrl + /가 /로 나올 때 (주석처리가 안될 때) (0) 2020.10.28 (Keras) model, weight 저장 및 불러오기 (0) 2020.10.20 댓글