Python/psycopg2 WHERE IN statement

前端 未结 3 1339
忘掉有多难
忘掉有多难 2020-12-13 05:44

What is the correct method to have the list (countryList) be available via %s in the SQL statement?

# using psycopg2
countryList=[\'UK\',\'France\']

sql=\'S         


        
相关标签:
3条回答
  • 2020-12-13 05:53

    To expland on the answer a little and to address named parameters, and converting lists to tuples:

    countryList = ['UK', 'France']
    
    sql = 'SELECT * from countries WHERE country IN %(countryList)s'
    
    cur.execute(sql, { # You can pass a dict for named parameters rather than a tuple. Makes debugging hella easier.
        'countryList': tuple(countryList), # Converts the list to a tuple.
    })
    
    0 讨论(0)
  • 2020-12-13 06:05

    For the IN operator, you want a tuple instead of list, and remove parentheses from the SQL string.

    # using psycopg2
    data=('UK','France')
    
    sql='SELECT * from countries WHERE country IN %s'
    cur.execute(sql,(data,))
    

    During debugging you can check that the SQL is built correctly with

    cur.mogrify(sql, (data,))
    
    0 讨论(0)
  • 2020-12-13 06:19

    You could use a python list directly as below. It acts like the IN operator in SQL and also handles a blank list without throwing any error.

    data=['UK','France']
    sql='SELECT * from countries WHERE country = ANY (%s)'
    cur.execute(sql,(data,))
    

    source: http://initd.org/psycopg/docs/usage.html#lists-adaptation

    0 讨论(0)
提交回复
热议问题