sqlite3.OperationalError:没有这样的列:年

时间:2017-06-22 11:11:53

标签: python-3.x sqlite

使用SQLite3并收到此错误:

  

sqlite3.OperationalError:没有这样的柱:年

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))

任何帮助都将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

一种可能性是不存在这样的列(消息是正确的),因为您已经在代码的早期版本中创建了表,该代码没有该列,因此CREATE TABLE IF NOT EXISTS将以静默方式返回。

您可以通过检查交互式.schema中的sqlite3来手动执行此操作。

和/或您可以通过检查表格结构来覆盖代码中的可能性。

SELECT * FROM sqlite_master;

如果不正确,可以使用ALTER TABLE book ADD COLUMN ... - 如果要重命名列,则会更复杂:SQLite Query Language: ALTER TABLE

答案 1 :(得分:0)

确保您拥有该列。

列出表格book的所有列:

sqlite3 books.db

之后:

.schema book 

如果您没有名称为year的列,则可以通过更改表格来添加它,或者您可以删除旧表格并再次创建。