Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kr8lD-00084K-1P for psycopg@arkaria.postgresql.org; Mon, 21 Dec 2020 00:09:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kr8lB-0004r4-24 for psycopg@arkaria.postgresql.org; Mon, 21 Dec 2020 00:09:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kr8lA-0004qw-T0 for psycopg@lists.postgresql.org; Mon, 21 Dec 2020 00:09:08 +0000 Received: from p3plsmtpa09-10.prod.phx3.secureserver.net ([173.201.193.239]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kr8l8-0005lK-4I for psycopg@postgresql.org; Mon, 21 Dec 2020 00:09:08 +0000 Received: from [192.168.1.54] ([98.38.100.21]) by :SMTPAUTH: with ESMTPSA id r8l5kViMBCJWEr8l5kJ9Du; Sun, 20 Dec 2020 17:09:03 -0700 X-CMAE-Analysis: v=2.4 cv=VKcYI/DX c=1 sm=1 tr=0 ts=5fdfe79f a=tZXnaF/PLMojNGgMD7Zm7A==:117 a=tZXnaF/PLMojNGgMD7Zm7A==:17 a=IkcTkHD0fZMA:10 a=C-sdMEEzAAAA:8 a=SNL7wKpgAAAA:8 a=epTmVMiNAAAA:8 a=nN1qTskwAAAA:8 a=pXf4fEsmLJa1HFccm0IA:9 a=PP7xm95swmTlccSa:21 a=pLoRQLA1tztgawd8:21 a=QEXdDO2ut3YA:10 a=l8-UVUhtTF0A:10 a=Gua-9QImm5IA:10 a=7WAne9lm5b0o3WrbkWlm:22 a=uEXi9pYaZPHPrIM342IW:22 a=ndEWmUVY6Yapc0oHF_P4:22 a=nYCRw11HfzszU9rNbXoz:22 X-SECURESERVER-ACCT: hagen@datasundae.com Subject: Re: BACK: Inserting a variable into cur.execute statement To: Daniele Varrazzo Cc: Adrian Klaver , psycopg@lists.postgresql.org, psycopg@postgresql.org References: <0bef01d6cce4$987d8120$c9788360$@datasundae.com> <5c55fb91-0b03-2077-fce7-38f2dcc0d402@aklaver.com> <0bf801d6cce8$011969d0$034c3d70$@datasundae.com> <63f9baec-b185-3278-e8a7-84692579f9d8@aklaver.com> From: Hagen Finley Message-ID: <1f317da4-b666-dc54-a673-231b873f2ba9@datasundae.com> Date: Sun, 20 Dec 2020 17:09:02 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US X-CMAE-Envelope: MS4xfOggTeklI7FU36sX8N3VgSj0NeV9KMAcCRhhdIyJKfqzjVWi1o3euxOOD3PqmJjQpHymCLAzVsIFh7/wCNwEslBstQhUI7SrGIuBp8FHSNPRIiqni9/4 P3RsJ0IEoYrUv9eVZluNX6wiOfiO1CHabDtkgDS6MRfNTvnQztgLWjIugq/mLLqMO7zU49xiHzVGegECeEE0FI4iJUNsWdzIYpa/jBw3ZxfkOHUOdq2J7HX+ rQq2bDyajuHNtzH7Ox/hmIZfsm9MXtw/vr+pqVwbbGAR/geFZ91evKWCJ3ZCQMRo+V0J59wqpAy9Fj7Tu/W1ow== List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk 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 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 >> 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 >> 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 >> >> >> >> >> >> >>