表X没有名为Y的列(Python)

表X没有名为Y的列(Python),python,sqlite,Python,Sqlite,这是较长Python程序的数据库处理部分: dbcon = lite.connect('spcbase.db') # Connects to database file spcbase.db. cur=dbcon.cursor() # Creates database cursor. cur.execute("CREATE TABLE IF NOT EXISTS spectrum(spectrumID INTEGER PRIMARY KEY AUTOINCRE

这是较长Python程序的数据库处理部分:

dbcon = lite.connect('spcbase.db')  # Connects to database file spcbase.db.
cur=dbcon.cursor()                  # Creates database cursor.
cur.execute("CREATE TABLE IF NOT EXISTS spectrum(spectrumID INTEGER PRIMARY KEY AUTOINCREMENT, seriesID INTEGER, scan_ang DECIMAL, Path TEXT)")
cur.execute("CREATE TABLE IF NOT EXISTS series(seriesID INTEGER PRIMARY KEY AUTOINCREMENT, date DATE, gpsx DECIMAL, gpsy DECIMAL, colprec DECIMAL, refangle DECIMAL)")
    # Executes SQL-query that will create one table of spectrums
    # and one table over series of measurements, should these
    # tables or this database not exist.
with dbcon:
    cur.execute("INSERT INTO series(date, gpsx, gpsy, colprec, refangle) VALUES(CURRENT_DATE, ?, ?, ?, ?)", [AP[0], AP[1], 6, refangle])
cur.execute("SELECT MAX(seriesID) FROM series")
current_series = cur.fetchone()[0]
src = u'.\\MaestroData'
dest = u'.\\target'
files=getspc(src)
i=0
for mfile in files:
    oldpath=os.path.normpath(os.path.join(src,mfile))
    print "oldpath: ", oldpath
    newpath=os.path.normpath(os.path.join(dest,mfile))
    print "newpath", newpath
    os.rename(oldpath,newpath)
    with dbcon:
        cur.execute("INSERT INTO spectrum(seriesID, scan_ang, Path) VALUES (?, ?, ?)", [current_series, scan_dirs[i], newpath])
    i=i+1
dbcon.close()
运行时,它会得到错误“操作错误:表spectrum没有列扫描”,尽管只在上面几行声明了这样一个列。怎么了?

您忘记提交:

dbcon.commit()

只有这样,任何修改查询才会真正发生。

你说的
如果不存在
。是否存在没有该列的现有表?我应该将其放在哪里?我什么时候可以用“with dbcon:”?我觉得我使用它很奇怪。你应该在对数据库做了任何更改(在任何插入、删除、更改等查询之后)后再使用它。默认情况下,数据库被锁定,即使进行了更改,连接对象(dbcon)也无法访问新数据。此外,如果您将其放在代码中的任何位置(声明dbcon变量后的ofc),则数据库将被永久更新,即使它第一次不起作用,下次运行代码时,它肯定会出现。