将列表添加到sqlite数据库

时间:2013-10-09 00:50:36

标签: python sqlite

如何将sqlite中的内容添加到已存在的表中,这是我目前所拥有的

>>> rid
'26539249'
>>> for t in [(rid,("billy","jim"))]:
c.execute("insert into whois values (?,?)",t)

我如何添加到jim并创建列表?或者是否有某种方法可以添加到它上面它可以有多个值?

2 个答案:

答案 0 :(得分:1)

我会在这里猜一猜,但我怀疑我错了。

您无法在数据库中插入("billy", "jim")列。这是故意的。像sqlite这样的RDBMS的重点是每个字段只包含一个值,而不是值列表。您无法在与其他人共享的列的中间搜索'jim',您无法根据'jim'等连接表格。

如果你确实想要这样做,你必须选择一些方法将多个值转换为单个字符串,并在阅读时将它们转换回来。您可以使用json.dumps / json.loadsrepr / ast.literal_eval或其他任何合适的内容。但是你必须自己编写额外的代码。如果你这样做,你将不会从数据库中获得任何真正的好处;你最好只使用shelve

所以,我猜你想要这样做,而你想知道你想要做什么。

假设您的架构看起来像这样:

CREATE TABLE whois (Rid, Names);

你想要的是:

CREATE TABLE whois (Rid);
CREATE TABLE whois_names (Rid, Name, FOREIGN KEY(Rid) REFERENCES whois(Rid);

然后,做插入:

tt = [(rid,("billy","jim"))]
for rid, names in tt:
    c.execute('INSERT INTO whois VALUES (?)', (rid,))
    for name in names:
        c.execute('INSERT INTO whois_names VALUES (?, ?)', (rid, name))

或者(可能更快,但不是交错):

c.executemany('INSERT INTO whois VALUES (?)', (rid for rid, names in tt))
c.executemany('INSERT INTO whois_names VALUES (?, ?),
              (rid, name for rid, names in tt for name in names))

答案 1 :(得分:0)

未经测试但应该做的诀窍

conn = sqlite3.connect(db)
cur = conn.cursor()


cur.execute('''CREATE TABLE if not exists Data 
                (id integer primary key autoincrement, List)''')
cur.execute("INSERT INTO Data (id,List) values (?,?)", 
                (lid, str(map(lambda v : v, My_list) ) ))