>  기사  >  데이터 베이스  >  Python에서 MySQLdb를 사용하여 \"SELECT ... WHERE ... IN ...\" 쿼리를 실행하는 방법은 무엇입니까?

Python에서 MySQLdb를 사용하여 \"SELECT ... WHERE ... IN ...\" 쿼리를 실행하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-02 17:19:29546검색

How to Execute

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.