Re: Encountered an error

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Shaan Repswal <shaun(dot)reapswaal(at)gmail(dot)com>, psycopg(at)postgresql(dot)org
Subject: Re: Encountered an error
Date: 2016-03-10 20:49:28
Message-ID: 56E1DDD8.6060809@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

On 03/10/2016 11:46 AM, Shaan Repswal wrote:
> I am new to databases and am a novice to programming in general. But I
> have a problem and this is the only way it seems to me it will work. I
> plan on learning the rest later. After I've created this program. To
> give you guys an idea of how naive I am. Please know that a lot of this
> just went over my head.
>
> @Daniele if I can't use %s what can I use? The "%l" that Adrian suggested?

They come from different systems, the %s from Python string formatting,
the %I from Postgres formatting, so they cannot be mixed. This is not
strictly true as Postgres also uses %s. See below for respective docs(I
am using Python 2 docs):

Python
https://docs.python.org/2/library/stdtypes.html#string-formatting

Postgres
http://www.postgresql.org/docs/9.5/interactive/functions-string.html#FUNCTIONS-STRING-FORMAT

> @Daniele What do you mean escaping values into identifier names?

See here:

http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

>
> @Adrian - I am Python string formatting? Whatt kind of string
> formatting. Which query should I format? The "Add a new column" query or
> the "add a value to the column of the currently entered record" query
> located right after it.

See the above Python string formatting section on how to build a string.
Build it and then pass that to your cursor to execute.

> @Adrian - I don't think I understand what you mean by the example of the
> format() function. Am I supposed to use it in psql? But my program is in
> Python... Is there some manual where I could get more info on this and
> where I could see a few examples of this function?

No I was showing an example in psql as it was quick and easy. You can
just build the string something like this(not tested)

cur.execute("select format('ALTER tbl_a ADD %I int DEFAULT NULL', 'fld_2')")

query_str = cur.fetchone()[0]

query_str should be the built string that you could then execute:

cur.execute(query_str)

For examples see the Postgres link above.

Also a previous thread on this list, starting here:

http://www.postgresql.org/message-id/554B69A9.2070209@aklaver.com

>
> @Karsten - I know, I got the feeling that the design felt awry as well.
> The database will be on the local machine. And the client side will have
> the code to error check the column names being added and also if there
> already is a column by this name or not.
>
>
>
> On Thu, Mar 10, 2016 at 8:02 PM, Karsten Hilbert
> <Karsten(dot)Hilbert(at)gmx(dot)net <mailto:Karsten(dot)Hilbert(at)gmx(dot)net>> wrote:
>
> On Thu, Mar 10, 2016 at 03:30:14PM +0100, Karsten Hilbert wrote:
>
> > While this is a nice solution to OPs problem I cannot resist
> > the urge to point out that to me the whole approach of adding
> > a column from within client code (outside a database
> > management application) does have at least a whiff of design
> > smell to it.
>
> Like, what happens if the user enters something to be used as
> a column name which isn't suitable for an identifier ?
>
> And then what if two different unsuitable user input values
> get normalized into the same column-name-suitable version ?
>
> Karsten
> --
> GPG key ID E4071346 @ eu.pool.sks-keyservers.net
> <http://eu.pool.sks-keyservers.net>
> E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346
>
>
> --
> Sent via psycopg mailing list (psycopg(at)postgresql(dot)org
> <mailto:psycopg(at)postgresql(dot)org>)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/psycopg
>
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Browse psycopg by date

  From Date Subject
Next Message Karsten Hilbert 2016-03-10 22:03:19 Re: Encountered an error
Previous Message Shaan Repswal 2016-03-10 19:46:33 Re: Encountered an error