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, ha...@datasundae.com 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 <adrian.kla...@aklaver.com>
Sent: Monday, December 7, 2020 3:04 PM
To: ha...@datasundae.com; psycopg@lists.postgresql.org;
psyc...@postgresql.org
Subject: Re: Inserting variable into
On 12/7/20 2:02 PM, ha...@datasundae.com 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