2017-06-22 118 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

啊!!!这正是发生的事情。之前有一个错字,所以我没有在早期版本的专栏。谢谢!! –

相关问题