pymysql 자리 표시자 숫자와 문자열 구분

4288 단어 MySQLPython3

결론


Python에서 mysql을 사용할 때 자리 표시자에 걸려 넘어졌기 때문에 조사해 봤습니다.
결과는 제목과 같다.
직관적으로 %d 수치를 사용했지만 전체%s가 좋았고 수치는 할당액에 의해 전개되지 않았다.

거치다


이런 코드로 삽입을 실행하면
import pymysql as pm
import traceback

DATABASE = {
    'host': 'localhost',
    'db': 'test',
    'user': 'root',
    'password': 'test',
    'port': 3306,
    'cursorclass': pm.cursors.DictCursor
}

con = pm.connect(**DATABASE)
try:
    with con.cursor() as cur:
        sql = """
            insert into corporation (id, name)
            values (%d, %s)
            ;
        """
        cur.execute(sql, (1,'テスト会社'))
    con.commit()
except:
    traceback.print_exc()
    con.rollback()
finally:
    con.close()
'%d 수치 넣기, 문자열 아님 요카스'인터넷 Google이라는 욕을 먹었으니까.
issue에 대답이 적혀 있습니다.
자리 표시자는 %s일 수 있으며 수치나 문자열을 적절하게 펼칠 수 있다고 합니다.
TypeError: %i format: a number is required, not str #329
Traceback (most recent call last):
  File "<ipython-input-4-84616a96211d>", line 21, in <module>
    cur.execute(sql, (1,'テスト会社'))
  File "/home/sysman/.pyenv/versions/anaconda3-5.3.1/envs/script/lib/python3.7/site-packages/pymysql/cursors.py", line 168, in execute
    query = self.mogrify(query, args)
  File "/home/sysman/.pyenv/versions/anaconda3-5.3.1/envs/script/lib/python3.7/site-packages/pymysql/cursors.py", line 147, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: %d format: a number is required, not str

문의

%d의 지방이 %s로 변경되었는데 디버거로 확인한 결과 다음과 같이 수치가 수치로 전개되어 대단하다고 생각합니다.초등학생

좋은 웹페이지 즐겨찾기