我正在使用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';
这是出于某种原因。我看到 - 假 - 指导我想到的地方。
我知道该怎么办。
答案 0 :(得分:1)
问题出现在main函数中,该函数在由于main函数中的错误而进行连接的commit()调用之前退出。