public inbox for [email protected]  
help / color / mirror / Atom feed
From: Hagen Finley <[email protected]>
To: Adrian Klaver <[email protected]>
To: [email protected]
To: [email protected]
Subject: BACK: Inserting a variable into cur.execute statement
Date: Sun, 20 Dec 2020 16:13:33 -0700
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<[email protected]>
	<[email protected]>
	<[email protected]>

Hello,

I finally got around to trying to implement this code and I am running 
into an "IndexError: tuple index out of range" problem.

I am running a function with parameters from a list:

def def_acct_analysis(sht,acct):
     print(param[par][0])
     print(param[par][1])
     sheet ="sheet"+str(sht)
     print(sheet)
     account = acct
     print(account)

par =0 param = [(1,'ACCT0'),(2,'ACCT1'),(3,'ACCT2'),]

for pin param:
     def_acct_analysis(param[par][0], param[par][1])

     par +=1

#Print statements above output:

1
ACCT0
sheet1
ACCT0

I want to insert the account name 'ACCT0' into my cur.execute but I get 
an error with this code:

cur.execute("SELECT COALESCE(SUM(revusd),0) FROM sfdc where stage LIKE 'Win%' AND 
saccount = %s", (account,))
wind1 = cur.fetchone()
conn.commit()

> Traceback (most recent call last):
>   File 
> "/home/datasundae/PycharmProjects/Registration_Reports/sfdc_Account_Tab_Analysis_Function.py", 
> line 333, in <module>
> def_acct_analysis(param[par][0], param[par][1])
> File 
> "/home/datasundae/PycharmProjects/Registration_Reports/sfdc_Account_Tab_Analysis_Function.py", 
> line 96, in def_acct_analysis
>   cur.execute("SELECT COALESCE(SUM(revusd),0) FROM sfdc where stage 
> LIKE 'Win%' AND saccount = %s", (account,))
> *IndexError: tuple index out of range*
I've returned to the psycopg docs but I don't see my error. Can someone 
else see it?

Best,

Hagen

On 12/7/20 3:31 PM, Adrian Klaver wrote:
> On 12/7/20 2:26 PM, [email protected] wrote:
>> So if I understand this correctly my new cur.execute would read:
>>
>> account = 'JPMC'
>>
>>   cur.execute("SELECT SUM(revusd) FROM sfdc where saccount = %s AND 
>> stage LIKE 'Commit%';",(account ))
>
> Since you are using a tuple this (account ) would need to be 
> (account,) per the docs at link previously posted:
>
> "For positional variables binding, the second argument must always be 
> a sequence, even if it contains a single variable (remember that 
> Python requires a comma to create a single element tuple):"
>
>
>
>>
>> and that would translate to
>>
>> cur.execute("SELECT SUM(revusd) FROM sfdc where saccount = 'JPMC' AND 
>> stage LIKE 'Commit%';")
>>
>> is that right?
>>
>>
>
> Not sure what below is supposed to be about?
>
>>
>> Note You can use a Python list as the argument of the IN operator 
>> using the PostgreSQL ANY operator.
>> ids = [10, 20, 30]
>> cur.execute("SELECT * FROM data WHERE id = ANY(%s);", (ids,))
>> Furthermore ANY can also work with empty lists, whereas IN () is a 
>> SQL syntax error.
>>
>> -----Original Message-----
>> From: Adrian Klaver <[email protected]>
>> Sent: Monday, December 7, 2020 3:04 PM
>> To: [email protected]; [email protected]; 
>> [email protected]
>> Subject: Re: Inserting variable into
>>
>> On 12/7/20 2:02 PM, [email protected] wrote:
>>> Hello,
>>>
>>> I'd like to use a variable for 'Big Company' (e.g. account) or where 
>>> = statements generally in my cur.execute statements:
>>>
>>> cur.execute("SELECT SUM(revusd) FROM sfdc where saccount = 'Big 
>>> Company' AND stage LIKE 'Commit%';")
>>> commitd1 = cur.fetchone()
>>> conn.commit()
>>>
>>> but I don't know the proper syntax with the cur.execute statement to 
>>> use a variable.
>>
>> https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries 
>>
>>
>>>
>>> I imagine others do  - thanks!
>>>
>>> Best,
>>>
>>> Hagen
>>>
>>>
>>>
>>
>>
>
>


view thread (11+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: BACK: Inserting a variable into cur.execute statement
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox