2011-08-23 38 views
4

我使用SQLite 3.6,並在Fedora 14在sqlite3的添加列,然後填充它

我試圖將列添加到使用ALTER TABLE表使用Python 2.7連接到它,然後隨即使用新創建列的數據更新表。通過python,我在數據庫的新列中除NULL之外什麼都沒有。如果我通過終端中的sqlite3運行查詢,它就可以工作。

這裏是 - 消毒 - 蟒蛇

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的主要功能管理,以及Python腳本結束時,連接將提交。 python執行時沒有錯誤,調試語句顯示在select調用中找到了所有正確的行。但是,當我使用Sqliteman或sqlite3查看數據庫時,我在新列中僅看到空值。

這是我的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

看起來像是python更新查詢有問題。我試過圍繞?在引號中,這是因爲SQLite查找文字而失敗的。將名稱改爲「'」+名稱+「'」也無法更新任何行。 –

+0

你在那個光標上調用了提交(而不僅僅是關閉)? –

+0

發現此問題。在主函數中,對update的調用實際上是過早地退出,而不是由於其他地方的錯誤而調用commit。 –

回答

1

該問題出現在主函數中,該函數在連接的commit()調用可能由於主函數中的錯誤而退出之前退出。

相關問題