[Tutor] MySQLdb: cant get '... where field in %s' to work for string sequences

Justin Ezequiel justin.mailinglists at gmail.com
Fri Jun 23 03:59:35 CEST 2006


how can I get 'select ... from ... where field in %s' to work for
sequences of strings?
sequences of integers works just fine

import MySQLdb

DBCRED = {'host': 'localhost', 'user': 'userjustin',
          'passwd': 'passwdjustin', 'db': 'dbjustin'}

ARTICLES = ('XXX99999', 'ABZ00002')
PIDS = (29379, 29380)

FIXEDARTICLENAME = """SELECT * FROM tblForTransfer2Prodsite
WHERE articleName IN ('XXX99999', 'ABZ00002')"""
TESTARTICLENAME = """SELECT * FROM tblForTransfer2Prodsite
WHERE articleName IN %r""" % (ARTICLES,)
SQLARTICLENAME = """SELECT * FROM tblForTransfer2Prodsite
WHERE articleName IN %s"""

FIXEDPID = """SELECT * FROM tblForTransfer2Prodsite
WHERE pid IN (29379, 29380)"""
TESTPID = """SELECT * FROM tblForTransfer2Prodsite
WHERE pid IN %r""" % (PIDS,)
SQLPID = """SELECT * FROM tblForTransfer2Prodsite
WHERE pid IN %s"""

if __name__ == '__main__':
    conn = MySQLdb.connect(**DBCRED)
    try:
        cur = conn.cursor()
        print FIXEDARTICLENAME
        print TESTARTICLENAME
        print cur.execute(FIXEDARTICLENAME),
        print cur.execute(TESTARTICLENAME),
        # cannot get this to work
        print cur.execute(SQLARTICLENAME, (ARTICLES,))
        print
        print FIXEDPID
        print TESTPID
        print cur.execute(FIXEDPID),
        print cur.execute(TESTPID),
        # but this does
        print cur.execute(SQLPID, (PIDS,))
        print
    finally: conn.close()


More information about the Tutor mailing list