2016-12-01 102 views
0

哇,這是非常困難的,只是刪除sqlite列,我一直在嘗試20件事情在過去的2天現在。sqlite3 Python刪除列

目前我有一些代碼不會給我一個錯誤(歡呼!),但它也不會給我任何結果。

我工作的SQL:常見問題解答思路 - http://www.sqlite.org/faq.html#q11但我堅持我的代碼在沒有錯誤的情況下運行,但是當我使用數據庫瀏覽器打開數據庫時,新表只包含我複製的標題,但不是數據。

下面是代碼:

backup = "backup" 
    c.execute("CREATE TABLE IF NOT EXISTS {bu} (id INTEGER PRIMARY KEY AUTOINCREMENT, headline TEXT, datestamp TEXT, link TEXT)".format(bu=backup)) 
    c.execute("INSERT INTO {dt} SELECT {id}, {hl}, {ds}, {lk} FROM {on}".format(dt=backup, id="id", hl="headline", ds="datestamp", lk="link", on=old_table)) 

就像我說的,它運行,但在新表中沒有數據,僅列的標題。

除了沮喪,任何幫助將不勝感激

+0

不要在SQL語句上使用字符串格式!有關詳細信息,請參見https://docs.python.org/2/library/sqlite3.html。 –

+0

@KlausD。表/列名稱不能被參數化。 –

+2

您鏈接到的FAQ條目使用兩個以上的語句。 –

回答

0

在這裏您的代碼段有可能出現按照您收到的意見,得到的信息在數據庫中,以「顯示」的一些其他可能的問題具體而言,您需要完成交易。

backup = "backup" 
c.execute("CREATE TABLE IF NOT EXISTS {bu} (id INTEGER PRIMARY KEY AUTOINCREMENT, headline TEXT, datestamp TEXT, link TEXT)".format(bu=backup)) 
c.execute("INSERT INTO {dt} SELECT {id}, {hl}, {ds}, {lk} FROM {on}".format(dt=backup, id="id", hl="headline", ds="datestamp", lk="link", on=old_table)) 
conn.commit() 

否則,當你離開的這些變量(可能是你的腳本結束)的交易將回滾由sqlite3的做下來的眼淚的一部分「範圍」。

+0

謝謝史蒂夫,我之前在鏈接顯示時嘗試了提交,但最終給我一個錯誤。然後在Klaus提供的鏈接上我看到他們使用了conn.commit(),這正是我所需要的。 (我知道你沒有看到代碼的其餘部分,所以你可能會早些時候說過)。但是,感謝您不僅僅發表評論,而且實際上還有一些代碼需要注意。 –

+0

我會繼續爲後代更新我的答案。感謝您的反饋!一些庫的遊標提交作爲只調用連接提交的語法糖。有些不。最好是明確的案件。 –

+0

當你不知道有多少列時,你是否可以使用這種方法?現在我知道有一個「標識」,「標題」,「日期戳」,「鏈接」列,所以我可以專門調用它們,但如果只知道要刪除的列,而不是所有其他列。如何將這些名稱放在.format(etc)中? –