SQL:从现有列插入和更新新列

时间:2014-06-17 18:21:09

标签: python mysql sql postgresql

Query matching string tags

SQL:从现有列

插入和更新新列

我想在PostGRESQL数据中插入一个新列,从现有列解析。

我在http://google.com/sadfasdfsd&AA=mytag&SS=sdfsdf列中有一个字符串URL。然后,我如何在此数据库中插入名为AAtag的新列。我将使用Python来解析字符串。请帮我写下以下任务的查询:


查询1.在此表中插入新列AAtag

ALTER TABLE table_name
ADD AAtag varchar

这是对的吗? AAtag是否需要引用?


查询2.在我从列URL运行解析脚本之后(假设我在Pyton列表中有标签列表),我想填写AAtag列。

UPDATE table_name
SET AAtag='{0!f}'
WHERE URL='{0!s}';

1 个答案:

答案 0 :(得分:0)

查询1:不,AATag不需要引用。但是,如果没有引用,它将被强制为小写。此外,引用使用名称的双引号而不是文字的单引号。所以,如果你没有引用你会看到的陈述:

create table table_name (URL text);
alter table table_name add AATag varchar;

nsp=# \d table_name
       Table "public.table_name"
 Column |       Type        | Modifiers
--------+-------------------+-----------
 url    | text              |
 aatag  | character varying |

查询2:

nsp=# update table_name set AATag = '{0!f}' where URL = '{0!s}';
UPDATE 0 (mine doesnt have any data in it)

您的示例将出于同样的原因工作,列不加引号,因此将是小写。如果你真的想要一切混合的情况你会:

create table table_name ("URL" text);
alter table table_name add "AATag" varchar;

nsp=# \d table_name
       Table "public.table_name"
 Column |       Type        | Modifiers
--------+-------------------+-----------
 URL    | text              |
 AATag  | character varying |

nsp=# update table_name set "AATag" = '{0!f}' where "URL" = '{0!s}';
UPDATE 0

我想我误解了这个问题。您是否在询问如何在sql中编写查询以更改数据库的结构,或者如何在python中编写查询?后者是一个不同的主题。基本上,你会:

import psycopg2
import psycopg2.extras
pg_conn = psycopg2.connect("dbname=dbname host=localhost user=postgres")
pg_cur = pg_conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
pg_cur.execute('whatever')
pg_conn.commit()

其中"无论什么"将是您要执行的语句。您可以准备语句,提供参数等。您需要查看psycopg2了解详细信息。所以,要从python中添加列:

pg_cur.execute('alter table table_name add "AATag" varchar')

当然你需要安装包。在unix上将是:

pip install psycopg2

但是,其他操作系统各不相同。