Обсуждение: Inserting variable into
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.
I imagine others do - thanks!
Best,
Hagen
On 12/7/20 2:02 PM, hagen@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
>
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com
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 ))
and that would translate to
cur.execute("SELECT SUM(revusd) FROM sfdc where saccount = 'JPMC' AND stage LIKE 'Commit%';")
is that right?
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.klaver@aklaver.com>
Sent: Monday, December 7, 2020 3:04 PM
To: hagen@datasundae.com; psycopg@lists.postgresql.org; psycopg@postgresql.org
Subject: Re: Inserting variable into
On 12/7/20 2:02 PM, hagen@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
>
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com
On 12/7/20 2:26 PM, hagen@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.klaver@aklaver.com>
> Sent: Monday, December 7, 2020 3:04 PM
> To: hagen@datasundae.com; psycopg@lists.postgresql.org; psycopg@postgresql.org
> Subject: Re: Inserting variable into
>
> On 12/7/20 2:02 PM, hagen@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
>>
>>
>>
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com
OK got it. That's very helpful thank you!
-----Original Message-----
From: Adrian Klaver <adrian.klaver@aklaver.com>
Sent: Monday, December 7, 2020 3:31 PM
To: hagen@datasundae.com; psycopg@lists.postgresql.org; psycopg@postgresql.org
Subject: Re: Inserting variable into
On 12/7/20 2:26 PM, hagen@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
(rememberthat 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.klaver@aklaver.com>
> Sent: Monday, December 7, 2020 3:04 PM
> To: hagen@datasundae.com; psycopg@lists.postgresql.org;
> psycopg@postgresql.org
> Subject: Re: Inserting variable into
>
> On 12/7/20 2:02 PM, hagen@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-quer
> ies
>
>>
>> I imagine others do - thanks!
>>
>> Best,
>>
>> Hagen
>>
>>
>>
>
>
--
Adrian Klaver
adrian.klaver@aklaver.com
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 p in 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,
Best,
Hagen
On 12/7/20 3:31 PM, Adrian Klaver wrote:
On 12/7/20 2:26 PM, hagen@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.klaver@aklaver.com>
Sent: Monday, December 7, 2020 3:04 PM
To: hagen@datasundae.com; psycopg@lists.postgresql.org; psycopg@postgresql.org
Subject: Re: Inserting variable into
On 12/7/20 2:02 PM, hagen@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
> cur.execute("SELECT COALESCE(SUM(revusd),0) FROM sfdc where stage LIKE 'Win%' AND saccount = %s", (account,))
You have to escape the percent in the like as %%.
-- Daniele
On Sun, 20 Dec 2020 at 23:13, Hagen Finley <hagen@datasundae.com> wrote:
>
> 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 p in 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, hagen@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.klaver@aklaver.com>
> Sent: Monday, December 7, 2020 3:04 PM
> To: hagen@datasundae.com; psycopg@lists.postgresql.org; psycopg@postgresql.org
> Subject: Re: Inserting variable into
>
> On 12/7/20 2:02 PM, hagen@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
>
>
>
>
>
>
>
Thank you Daniele,
That did it! Much appreciated.
Best,
Hagen
On 12/20/20 4:33 PM, Daniele Varrazzo wrote:
>> cur.execute("SELECT COALESCE(SUM(revusd),0) FROM sfdc where stage LIKE 'Win%' AND saccount = %s", (account,))
> You have to escape the percent in the like as %%.
>
> -- Daniele
>
> On Sun, 20 Dec 2020 at 23:13, Hagen Finley <hagen@datasundae.com> wrote:
>> 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 p in 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, hagen@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.klaver@aklaver.com>
>> Sent: Monday, December 7, 2020 3:04 PM
>> To: hagen@datasundae.com; psycopg@lists.postgresql.org; psycopg@postgresql.org
>> Subject: Re: Inserting variable into
>>
>> On 12/7/20 2:02 PM, hagen@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
>>
>>
>>
>>
>>
>>
>>
On 12/20/20 3:13 PM, Hagen Finley wrote:
> 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
FYI, the above can be simplified to:
param = [(1,'ACCT0'),(2,'ACCT1'),(3,'ACCT2'),]
for p in param:
def_acct_analysis(p[0], p[1])
>
> #Print statements above output:
>
--
Adrian Klaver
adrian.klaver@aklaver.com
Interesting - thank you Adrian.
-----Original Message-----
From: Adrian Klaver <adrian.klaver@aklaver.com>
Sent: Sunday, December 20, 2020 5:57 PM
To: Hagen Finley <hagen@datasundae.com>; psycopg@lists.postgresql.org; psycopg@postgresql.org
Subject: Re: BACK: Inserting a variable into cur.execute statement
On 12/20/20 3:13 PM, Hagen Finley wrote:
> 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
FYI, the above can be simplified to:
param = [(1,'ACCT0'),(2,'ACCT1'),(3,'ACCT2'),]
for p in param:
def_acct_analysis(p[0], p[1])
>
> #Print statements above output:
>
--
Adrian Klaver
adrian.klaver@aklaver.com
> FYI, the above can be simplified to:
>
> def_acct_analysis(p[0], p[1])
>
> def_acct_analysis(p[0], p[1])
Which, in turn, can be simplified to
def_acct_analysis(*p)
On Sun, 20 Dec 2020 at 17:21, <hagen@datasundae.com> wrote:
Interesting - thank you Adrian.
-----Original Message-----
From: Adrian Klaver <adrian.klaver@aklaver.com>
Sent: Sunday, December 20, 2020 5:57 PM
To: Hagen Finley <hagen@datasundae.com>; psycopg@lists.postgresql.org; psycopg@postgresql.org
Subject: Re: BACK: Inserting a variable into cur.execute statement
On 12/20/20 3:13 PM, Hagen Finley wrote:
> 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
FYI, the above can be simplified to:
param = [(1,'ACCT0'),(2,'ACCT1'),(3,'ACCT2'),]
for p in param:
def_acct_analysis(p[0], p[1])
>
> #Print statements above output:
>
--
Adrian Klaver
adrian.klaver@aklaver.com