Hi,

Bruno Desthuilliers wrote:
bcurtu a écrit :
Hi,

I have a BIIIIIG problem with the next query:

        cursor.execute("""
                    SELECT titem.object_id, titem.tag_id
                    FROM tagging_taggeditem titem
                    WHERE titem.object_id IN (%s)
                """,( eid_list))

eid_list is suppossed to be a list of ids = [1,5,9]

How can I make it work?

You have to build your sql statement in three stages:

# stage 0: the template
sql_template = """
    SELECT titem.object_id, titem.tag_id
    FROM tagging_taggeditem titem
    WHERE titem.object_id IN (%s)
"""

# stage 1: build correct place_holders string for the actual number
# of items in eid_list
place_holders = ", " .join("%s" for x in xrange(len(eid_list)))

Hm. either ", ".join(["%s"]*len(eid_list))
or ", ".join("%s" for x in eid_list)

should produce the same, wouldn't it? :-)

# stage 2 : build the effective sql statement
sql = sql_template % place_holders

# ok, let's go:
cursor.execute(sql_template, eid_list)


NB : you can of course make it in a single statement, but readability will suffer:

cursor.execute(
    """
    SELECT titem.object_id, titem.tag_id
    FROM tagging_taggeditem titem
    WHERE titem.object_id IN (%s)
    """ % ", " .join("%s" for x in xrange(len(eid_list))),
    eid_list
    )

I'd think giving the arguments in a form of an array type should
work too. At least in postgres there are references to do so.

Regards
Tino

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to