MySQLdb를 사용하여 "SELECT ... WHERE ... IN ..." 실행
Python에서 " MySQLdb를 사용하는 IN" 절에는 문제가 발생할 수 있습니다. 다음 시나리오를 고려하십시오.
문제:
다음 코드를 사용하여 Python 내에서
<code class="sql">SELECT fooid FROM foo WHERE bar IN ('A','C');</code>
다음과 같은 쿼리를 실행하려고 합니다.
<code class="python">import MySQLdb import config connection=MySQLdb.connect( host=config.HOST,user=config.USER,passwd=config.PASS,db='test') cursor=connection.cursor() sql='SELECT fooid FROM foo WHERE bar IN %s' args=[['A','C']] cursor.execute(sql,args) data=cursor.fetchall() print(data) # ()</code>
두 행이 필요함에도 불구하고 빈 데이터 세트가 생성됩니다.
원인:
MySQLdb는 요소 주위에 자동으로 작은따옴표를 추가합니다. 입력 목록 인수로 인해 쿼리는 다음과 같이 실행됩니다.
<code class="sql">SELECT fooid FROM foo WHERE bar IN ("'A'", "'C'")</code>
이 쿼리는 작은따옴표 목록을 사용한 원래 의도된 쿼리와 다릅니다.
해결책:
이 문제를 해결하려면 쿼리 매개변수를 수동으로 구성해야 합니다. 다음은 문제를 해결하는 Python 코드의 수정된 버전입니다.
<code class="python">import MySQLdb import config connection=MySQLdb.connect( host=config.HOST,user=config.USER,passwd=config.PASS,db='test') cursor=connection.cursor() args=['A', 'C'] sql='SELECT fooid FROM foo WHERE bar IN (%s)' in_p=', '.join(map(lambda x: '%s', args)) sql = sql % in_p cursor.execute(sql, args) data=cursor.fetchall() print(data) # (('1',), ('3',))</code>
map()을 사용하여 in_p 문자열을 구성하고 이를 쉼표로 결합하면 args의 요소에 대한 일련의 자리 표시자를 효과적으로 생성할 수 있습니다. % 연산자를 사용하면 쿼리가 실행될 때 자리 표시자가 실제 값으로 올바르게 대체됩니다.
위 내용은 Python에서 MySQLdb를 사용하여 \'SELECT ... WHERE ... IN ...\' 쿼리를 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!