2012-03-29 4 views
3

Я изучаю, как использовать sqlite3 в python. У меня есть простая таблица с двумя столбцами: идентификатор и имя.sqlite3 python добавление столбцов и обновление значений

Я попытался добавить новый столбец в этой таблице, используя следующие команды (я работаю в IPython):

conn = sqlite3.connect('mydatabase.db') 
c = conn.cursor() 

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

Я получаю следующее сообщение об ошибке:

OperationalError: near "Group": syntax error 

Затем, основываясь на примеры здесь на SO Я пробовал,

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

Это сработало. Однако сейчас у меня другая проблема. По-видимому, имя столбца - «Группа» вместо «Группы».

Например, когда я пытаюсь обновить значение в этом столбце из следующих трех команд, один работает, а два нет.

conn = sqlite3.connect('mydatabase.db') 
c = conn.cursor() 

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

Я получаю следующее сообщение об ошибке:

OperationalError: near "Group": syntax error 

Затем я попытался поставить кавычки вокруг имен столбцов:

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. Это отлично работает.

c.execute("update studentinfo set 'Group'=1 where ID <= 4") #This worked fine. 

То есть, он считает название столбца «Группой» (с кавычками). Как добавить столбец с именем Group?

спасибо.

ответ

6

Если имя таблицы или имя столбца совпадают с ключевыми словами SQL (например, GROUP), генерируются ошибки. Вы должны указать имя таблицы с помощью ``, а не ''. Таким образом, вы можете использовать:

alter table studentinfo add column `Group` integer 
+0

Duv, а также @brice: не помнил, что GROUP - это ключевое слово. Будет изменено имя столбца. Благодарю. – Curious2learn

1

Проблема в том, как вы выполнили команду ALTER TABLE. Включая одинарные кавычки вокруг имени столбца, который вы указали, который был частью имени. Бросьте кавычки, и он должен работать так, как вы ожидаете.

FYI: вы можете запросить схему в sqlite3 с помощью команды dot-s (.s). Он покажет вам имена истинных столбцов. Вот краткий пример:

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

GROUP является SQLite ключевым словом.

Разрешение: Назовите свою колонку чем-то еще.

Смежные вопросы