1

我如何在 sqlite 中添加一些东西到一个已经存在的表中这是我到目前为止所拥有的

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

我将如何添加到 jim 并创建一个列表?或者有什么方法可以添加到它上面,所以它可以有多个值?

4

2 回答 2

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))
于 2013-10-09T01:10:00.377 回答
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) ) ))
于 2017-11-09T18:08:03.740 回答