根据上一列中的用户输入/内容在数据库中创建新列

时间:2019-01-31 17:10:27

标签: python python-3.x sqlite

我正在建立一个数据库,该数据库接受用户输入并将其存储在数据库中。但是我希望数据库(db)中的每一行对于每个用户来说都是唯一的,并包含单独的输入(即用户输入的内容)

这是我到目前为止的代码:

 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

所以基本上我需要做两件事。

第一件事:我需要查看数据库中是否已经有一个userid。尝试和除外做到这一点。如果它不在数据库中,那么我需要在数据库中为该用户标识创建一行,并将关键字添加到关键字列中。 如果用户名已经在数据库中,那么我需要将关键字添加到该列中。

第二件事:如果关键字列中包含一些文本,那么我需要在其中存储新关键字。

我有些零碎,但我不知道如何将其组合在一起。

1 个答案:

答案 0 :(得分:0)

要向表中添加列,可以使用ALTER TABLE SQL

ALTER TABLE keyword ADD COLUMN your_column_definition

SQL As Understood By SQLite ALTER TABLE

您将必须以编程方式生成SQL。

但是,查看关键字表的设计会更简单。当每个用户ID有多个数据项要存储时,为什么用户ID为UNIQUE?我建议如果您要使用户ID和关键字组合为UNIQUE的复合UNIQUEness可以简化事情。

例如也许使用:-

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