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
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 |