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

0 投票
1 回答
1585 浏览
提问于 2025-04-18 10:07

查询匹配字符串标签

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 列解析的脚本后(假设我已经在Python列表中得到了标签的列表),我想把 AAtag 列填充上。

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

1 个回答

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

其中“whatever”就是你想执行的语句。你可以准备语句,提供参数等等。你需要查看psycopg2的详细信息。所以,要从Python中添加列:

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

当然,你需要先安装这个包。在Unix系统上可以这样做:

pip install psycopg2

不过,其他操作系统可能会有所不同。

撰写回答