2017-06-22 116 views
0

中使用sqlite3,並得到這個錯誤:sqlite3.OperationalError:沒有這樣的列:今年

sqlite3.OperationalError: no such column: year

SQLite3的新手在這裏。 真的很困惑,現在,以什麼代碼的一部分了錯誤...

import sqlite3 

def connect(): 
    conn=sqlite3.connect("books.db") 
    cur=conn.cursor() 
    cur.execute("CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY, title text, author text, year integer, isbn integer)") 
    conn.commit() 
    conn.close() 



def search(title="",author="",year="",isbn=""): 
    conn=sqlite3.connect("books.db") 
    cur=conn.cursor() 
    cur.execute("SELECT * FROM book WHERE title=? OR author=? OR year=? OR isbn=?",(title,author,year,isbn)) 
    rows=cur.fetchall() 
    conn.close() 
    return rows 

connect() 
print(search(year=1918)) 

任何幫助,將不勝感激,謝謝!

+0

有一個想法:也許沒有這樣的列,因爲你已經創建了表,在你沒有該列的代碼的早期版本中,所以'CREATE TABLE IF NOT EXISTS'悄悄地返回。 –

回答

0

請確保您有該列。

要列出表book的所有列:

sqlite3 books.db 

,之後:

.schema book 

如果沒有名爲year一欄,你可以通過改變其添加該表,或者您可以刪除舊錶並重新創建它。

+0

哈哈,對。我第一次運行它時沒有列,因爲「作者」中有這個錯字。感謝您的幫助!! –

0

一種可能性是沒有這樣的列存在(消息是正確的),因爲您已經在沒有該列的代碼的早期版本中創建了表,因此CREATE TABLE IF NOT EXISTS將以無提示方式返回。

你可以手動通過檢查.schema交互sqlite3

並且/或者您可以通過檢查表格結構來覆蓋代碼中的可能性。

SELECT * FROM sqlite_master; 

如果這是不正確的,你可以使用ALTER TABLE book ADD COLUMN ... - 如果你想重命名列,它更復雜:SQLite Query Language: ALTER TABLE

+0

啊!!!這正是發生的事情。之前有一個錯字,所以我沒有在早期版本的專欄。謝謝!! –

相關問題