在SQLite3中添加列,然后填充它

时间:2011-08-23 15:21:04

标签: python sqlite

我正在使用SQLite 3.6,并在Fedora 14上使用Python 2.7连接到它。

我正在尝试使用ALTER TABLE向表中添加一个列,然后立即使用新创建的列的数据更新表。通过python,我在数据库的新列中只得到NULL。如果我通过终端中的sqlite3运行查询,它就可以工作。

这是 - sanitized - python

def upgrade(cursor)
    cursor.execute("ALTER TABLE Test ADD COLUMN 'Guid' TEXT")

    cursor.execute("SELECT DISTINCT Name FROM Test WHERE ForeignKey=-1")
    # Loop using a row factory that puts all the Names into a list called NameList

    for Name in NameList:
        Guid = uuid.uuid4()
        cursor.execute("UPDATE Test SET Guid=? WHERE Name=?", (str(Guid),Name))

SQLite3连接由python的main函数管理,并且在python脚本结束时提交连接。 python执行时没有错误,调试语句显示在select调用中找到了所有正确的行。但是,当我使用Sqliteman或sqlite3查看数据库时,我在新列中只看到NULL。

这是我的sqlite3电话。

ALTER TABLE Test ADD COLUMN 'Guid' TEXT;
UPDATE Test SET GUID="foo" WHERE Name="Test3";
select Name, Guid from Test where Name='Test3';

这是出于某种原因。我看到 - 假 - 指导我想到的地方。

我知道该怎么办。

1 个答案:

答案 0 :(得分:1)

问题出现在main函数中,该函数在由于main函数中的错误而进行连接的commit()调用之前退出。