首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite3 python添加列和更新值

问sqlite3 python添加列和更新值
EN

Stack Overflow用户
提问于 2012-03-29 23:11:07
回答 3查看 5.8K关注 0票数 3

我正在学习如何在python中使用sqlite3。我有一个简单的表,包含两列: ID和name。

我尝试使用以下命令向该表添加新列(我正在使用ipython):

代码语言:javascript
复制
conn = sqlite3.connect('mydatabase.db')
c = conn.cursor()

c.execute("alter table studentinfo add column Group integer")

我得到以下错误:

代码语言:javascript
复制
OperationalError: near "Group": syntax error

然后根据S.O.上的例子我试过了

代码语言:javascript
复制
c.execute("alter table studentinfo add column 'Group' integer")

这起作用了。然而,我现在有另一个问题。显然,列名是"Group“,而不仅仅是”Group“。

例如,当我尝试更新此列中的值时,在以下三个命令中,一个有效,两个无效。

代码语言:javascript
复制
conn = sqlite3.connect('mydatabase.db')
c = conn.cursor()

c.execute("update studentinfo set Group=1 where ID <= 4") #This did not work.

我得到以下错误:

代码语言:javascript
复制
OperationalError: near "Group": syntax error

然后,我尝试在列名两边加上引号:

代码语言:javascript
复制
c.execute("update studentinfo set 'Group'=1 where 'ID' <= 4")
#This did not work either. Gives no error, but does not do anything. Records remain   
#unchanged. 

然后,我尝试在Group周围使用引号,而不是在ID周围。这样做效果很好。

代码语言:javascript
复制
c.execute("update studentinfo set 'Group'=1 where ID <= 4") #This worked fine.

也就是说,它将列名视为'Group‘(带有引号)。如何添加仅具有名称Group的列?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-29 23:17:12

当表名或列名与SQL关键字(如GROUP)相同时,会产生错误。您需要用将表名引起来,而不是‘’。因此,您可以使用:

代码语言:javascript
复制
alter table studentinfo add column `Group` integer
票数 6
EN

Stack Overflow用户

发布于 2012-03-29 23:19:38

GROUP是一个SQLite关键字。

解决方案:将列命名为其他名称。

票数 3
EN

Stack Overflow用户

发布于 2012-03-29 23:18:08

问题在于执行ALTER TABLE命令的方式。通过在您指定的列名两边加上单引号,该列名是该名称的一部分。去掉引号,它就会像你所期望的那样工作。

仅供参考:您可以使用点-s命令(.s)在sqlite3中查询模式。它将向您显示真实的列名。下面是一个快速示例:

代码语言:javascript
复制
SQLite version 3.7.9 2011-11-01 00:52:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table a( mycol1 INT );
sqlite> alter table a add column mycol2 int;
sqlite> alter table a add column 'mycol3' int;
sqlite> .s
CREATE TABLE a( mycol1 INT , mycol2 int, 'mycol3' int);
sqlite>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9928232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档