sqlite3.DatabaseError:文件不是数据库

新手上路,请多包涵

执行以下 INSERT 语句时出现上述错误。数据库文件 ce.db 与我的代码位于同一目录中,我已经成功地在其中创建了表。

我的 sqlite 版本是 2.8.17,我确信我的 db 文件存在,因为我可以在我的目录中看到它,并且已经成功地在其中创建了表。

导入sqlite3

 @app.route("/sign_up", methods=["GET", "POST"])
def sign_up():
  # [..other code..]

    conn = sqlite3.connect("ce.db")
    c = conn.cursor()
    result = c.execute("INSERT INTO users (name, hash) VALUES (:name, :hash)", {"name":request.form.get("username"), "hash":hashp})
    conn.commit()

对于以“result=…”开头的行,调试器显示“sqlite3.DatabaseError:文件不是数据库”错误。

原文由 Anna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 939
2 个回答

做了更多的挖掘,结果发现 2.6.0 是 DB-API 版本(通过 print(sqlite3.version) 获得 - 不完全确定那是什么或它的用途)和我的 sqlite 版本(print(sqlite3.sqlite_version) ) 是 3.22.0。还意识到(在 bash 中运行文件 ce.db)我的 ce.db 是在(或使用?)2.x 上创建的……设法删除并使用 sqlite3 ce.db 语句重新创建它……现在似乎可以工作。所有初学者的问题,我知道,但认为它可能有助于像我这样的任何未来迷失的灵魂分享这个:)

原文由 Anna 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在使用 sqlite3 在 Python 中创建数据库时也遇到了这个问题,为我解决的是从数据库名称中删除 .db:

conn = sqlite3.connect("ce.db") –> conn = sqlite3.connect("ce")

(+ 还有 2.6.0 DB-API 版本,我的 sqlite 版本是 3.31.1)

原文由 Tim 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进