Создание нового столбца в базе данных на основе пользовательского ввода / содержимого в предыдущем столбце - PullRequest
0 голосов
/ 31 января 2019

Я создаю базу данных, которая принимает пользовательский ввод и хранит ее в базе данных.Однако я хочу, чтобы каждая строка в базе данных (дБ) была уникальной для каждого пользователя и содержала отдельный ввод (то есть, вставленный пользователями)

Это код, который у меня есть:

 user_id = random_number_genned_here
 keyword = input_from_user  
 sqlite_file = 'keywords.sqlite' 
 conn = sqlite3.connect(sqlite_file)
 c = conn.cursor() 
 c.execute("""CREATE TABLE IF NOT EXISTS keyword(userid TEXT UNIQUE, keyword TEXT)""")
 try:
      c.execute("""INSERT INTO keyword (userid , keyword) VALUES (?, ?, )""", (user_id,ukeyword))
 except:
      #where I need help

Итак, в основном мне нужно сделать 2 вещи.

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

Второе: если в столбце ключевых слов есть какой-то текст, мне нужно в столбце сохранить новое ключевое слово.

У меня есть кусочки, но я не знаюкак собрать это вместе.

1 Ответ

0 голосов
/ 31 января 2019

Чтобы добавить столбец в таблицу, вы можете использовать ALTER TABLE SQL

ALTER TABLE keyword ADD COLUMN your_column_definition

SQL как понял SQLite ALTER TABLE

Вы должны сгенерироватьSQL программно.

Однако было бы проще взглянуть на структуру таблицы ключевых слов.Почему идентификатор пользователя является УНИКАЛЬНЫМ, если для каждого идентификатора пользователя необходимо сохранить несколько элементов данных?Я бы предположил, что все было бы проще, если бы у вас был составной UNIQUEness, представляющий собой make userid и ключевое слово, объединенное в UNIQUE.

например, возможно, используйте: -

CREATE TABLE IF NOT EXISTS keyword(userid TEXT, keyword TEXT, UNIQUE(userid,keyword));

Возможно, рассмотритеследующая демонстрация: -

DROP TABLE IF EXISTS keyword;
CREATE TABLE IF NOT EXISTS keyword(userid TEXT, keyword TEXT, UNIQUE(userid,keyword));
INSERT OR IGNORE INTO keyword VALUES
    ('User001','TEST'),('User001','NOT A TEST'),('User001','KEYWORD A'),('User001','TEST'),
    ('User002','TEST'),('User002','KEYWORD A'),('User002','KEYWORD B')
;
    -- Ooops (not really as duplicates just get ignored)
INSERT OR IGNORE INTO keyword VALUES
    ('User001','TEST'),('User001','NOT A TEST'),('User001','KEYWORD A'),('User001','TEST'),
    ('User002','TEST'),('User002','KEYWORD A'),('User002','KEYWORD B')
;
SELECT * FROM keyword;
SELECT * FROM keyword WHERE userid = 'User001';

При запуске журнал сообщений показывает: -

DROP TABLE IF EXISTS keyword
> OK
> Time: 0.439s


CREATE TABLE IF NOT EXISTS keyword(userid TEXT, keyword TEXT, UNIQUE(userid,keyword))
> OK
> Time: 0.108s


INSERT OR IGNORE INTO keyword VALUES
    ('User001','TEST'),('User001','NOT A TEST'),('User001','KEYWORD A'),('User001','TEST'),
    ('User002','TEST'),('User002','KEYWORD A'),('User002','KEYWORD B')
> Affected rows: 6
> Time: 0.095s


-- Ooops (not really as duplicates just get ignored)
INSERT OR IGNORE INTO keyword VALUES
    ('User001','TEST'),('User001','NOT A TEST'),('User001','KEYWORD A'),('User001','TEST'),
    ('User002','TEST'),('User002','KEYWORD A'),('User002','KEYWORD B')
> Affected rows: 0
> Time: 0s


SELECT * FROM keyword
> OK
> Time: 0s


SELECT * FROM keyword WHERE userid = 'User001'
> OK
> Time: 0s
  • Обратите внимание, что вторая вставка вставляет 0 строк, поскольку все они являются дубликатами

Запросы выдают: -

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...