在Python+2的新列中添加一个值

2024-10-03 02:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想向db文件添加一个新列,并以2为间隔填充它的值。在这里我写了一些代码。。。在

import sqlite3

WorkingFile = "C:\\test.db"
con = sqlite3.connect(WorkingFile)

cur = con.cursor()

cur.execute("ALTER table MyTable add column 'WorkingID' 'long'") # Add a column "WorkingID" 

rows = cur.fetchall()

iCount = 0
for row in rows:
    iCount = iCount + 2 
    print iCount
    cur.execute("UPDATE MyTable SET WorkingID = ?" , (iCount,)) # Here I have question: How to write the WHERE command?

con.commit()
cur.close()

上面的代码为我提供了一个具有相同值的新列。像这样:

^{pr2}$

但我想要这样的结果:

WorkingID
2
4
6
8
10
...

我对代码的问题是,我不知道如何在UPDATE下编写WHERE代码。你能帮帮我吗?谢谢。在


Tags: 文件代码executedbmytableupdatecolumnwhere
3条回答

SQL引擎无法区分行之间的差异。在

您应该添加一个autoincrement或ROWID列,以便将其设置为ID

我不知道您的表的结构,因为您不是在这里创建它而是修改它。在

如果您碰巧创建了它,请创建一个新的INTEGER PRIMARY KEY列,然后可以像这样使用WHERE

cur.execute(
    "CREATE TABLE MyTable"
    "(RowID INTEGER PRIMARY KEY,"
    "WorkingID INTEGER)")

如果不能将ID添加到表中,则可以使用一种非常奇怪的方法。所以。。 在循环之前进行查询

UPDATE MyTable SET WorkingID = 2 LIMIT 1

之后呢

^{pr2}$

这不是一个好办法,但应该行得通。在

如果您的表有一些唯一的ID,请获取它们的排序列表(它们的实际值无关紧要,只关心它们的顺序):

ids = [row[0] for row in cur.execute("SELECT id FROM MyTable ORDER BY id")]
iCount = 0
for id in ids:
    iCount += 2
    cur.execute("UPDATE MyTable SET WorkingID = ? WHERE id = ?",
                [iCount, id])

如果没有这样的列,请改用rowid。在

相关问题 更多 >