sqlite3 python добавление столбцов и обновление значений - PullRequest
3 голосов
/ 29 марта 2012

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

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

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

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

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

OperationalError: near "Group": syntax error

Затем, основываясь на примерах здесь, на С.О. Я пытался,

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?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 29 марта 2012

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

alter table studentinfo add column `Group` integer
3 голосов
/ 29 марта 2012

GROUP - ключевое слово SQLite.

Разрешение: Назовите вашу колонку как-нибудь еще.

1 голос
/ 29 марта 2012

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

К вашему сведению: вы можете запросить схему в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...