Python + Sqlite:添加一个新列,并以2为间隔填充其值

时间:2016-09-24 14:36:51

标签: python sqlite

我想在Notice: Array to string conversion in C:\xampp\htdocs\PD\validate\save-actual.php on line 66 Notice: Array to string conversion in C:\xampp\htdocs\PD\validate\save-actual.php on line 66 Notice: Array to string conversion in C:\xampp\htdocs\PD\validate\save-actual.php on line 66 文件中添加一个新列,并以2的间隔填充其值。这里我写了一些代码......

db

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

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()

但我想要一个这样的结果:

WorkingID
10
10
10
...

我对代码的问题是,我不知道如何在WorkingID 2 4 6 8 10 ... 下编写WHERE代码。你能帮帮我吗?感谢。

3 个答案:

答案 0 :(得分:1)

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

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

我不知道你的桌子的结构,因为你不在这里创建它,而是改变它。

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

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

答案 1 :(得分:0)

如果您的表有一些唯一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

答案 2 :(得分:0)

如果您无法在桌面上添加ID,您可以采用一种非常奇怪的方式。所以.. 在循环之前,您进行查询

UPDATE MyTable SET WorkingID = 2 LIMIT 1

之后

iCount = 2
for row in rows:
    iCount = iCount + 2 
    print iCount
    cur.execute("UPDATE MyTable SET WorkingID = ? WHERE WorkibgID is NULL LIMIT 1" , (iCount,))

这不是一个好方法,但它应该有用。