Python中使用web.py框架时,SQlite建立的表无法被找到的问题如何解决?

希望各位老师能够帮忙解答一下!一个自学的萌新,最近在看一篇公众号的实例上,关于利用 web.py 做一个关于电影数据的网站。引入了 SQlite 数据库,但是在运行代码的时候总是提示:

no such table:movie。

但是我绝对是建立了这个表了

以下是关于这个库具体建立表和数据的信息:

SQLite version 3.22.0 2018-01-22 18:45:57 Enter ".help" for usage hints. Connected to a transient in-memory database. Use ".open FILENAME" to reopen on a persistent database. sqlite> .databases main: sqlite> create table movie(title,year,country,abstract); sqlite> insert into movie ...> values ('阿甘正传', 1994, '美国', 'Life is like a box of chocolates.'); sqlite> insert into movie ...> values ('肖申克的救赎', 1994, '美国', 'Hope is a good thing.'); sqlite> select*from movie; 阿甘正传|1994|美国|Life is like a box of chocolates. 肖申克的救赎|1994|美国|Hope is a good thing. sqlite> .tables movie sqlite> .quit

以下是 python 代码部分:

import web

urls = ( '/', 'index' )

db = web.database(dbn='sqlite',db='MovieSite.db')

render = web.template.render('templates/')

class index: def GET(self): movies = db.select('movie') return render.index(movies)

if name == "main": app = web.application(urls, globals()) app.run()

以下是运行的报错情况:

D:\python>python web1.py 127.0.0.1 http://127.0.0.1:8080/ ERR: SELECT * FROM movie Traceback (most recent call last): File "C:\Python3\lib\site-packages\web\application.py", line 257, in process return self.handle() File "C:\Python3\lib\site-packages\web\application.py", line 248, in handle return self._delegate(fn, self.fvars, args) File "C:\Python3\lib\site-packages\web\application.py", line 488, in _delegate return handle_class(cls) File "C:\Python3\lib\site-packages\web\application.py", line 466, in handle_class return tocall(*args) File "D:\python\web1.py", line 13, in GET movies = db.select('movie') File "C:\Python3\lib\site-packages\web\db.py", line 705, in select return self.query(qout, processed=True) File "C:\Python3\lib\site-packages\web\db.py", line 1058, in query out = DB.query(self, *a, **kw) File "C:\Python3\lib\site-packages\web\db.py", line 665, in query self._db_execute(db_cursor, sql_query) File "C:\Python3\lib\site-packages\web\db.py", line 596, in _db_execute out = cur.execute(query, params) sqlite3.OperationalError: no such table: movie 127.0.0.1:54375 - - [13/Feb/2018 23:59:13] "HTTP/1.1 GET /" - 500 Internal Server Error.

不知道有没有老师能帮助一下我,万分感激。 (萌新一个,咱们这里发文没有编辑字体颜色和背景之类的东西吗?)


Python中使用web.py框架时,SQlite建立的表无法被找到的问题如何解决?

5 回复

歪个楼,都 8102 年了,还用 web。py 啊


这个问题通常是因为SQLite数据库文件路径或表名大小写导致的。先检查你的数据库连接和表创建代码。

核心解决方案:

  1. 检查数据库连接路径
import web
import os

# 确保使用绝对路径
db_path = os.path.join(os.path.dirname(__file__), 'your_database.db')
db = web.database(dbn='sqlite', db=db_path)
  1. 验证表是否真的存在
# 查询所有表名
tables = db.query("SELECT name FROM sqlite_master WHERE type='table'")
for table in tables:
    print(table.name)

# 或者直接尝试查询(使用正确的大小写)
try:
    results = db.select('your_table_name')
    print("表存在,查询成功")
except Exception as e:
    print(f"错误: {e}")
  1. 完整示例
import web
import os

urls = ('/', 'index')

class index:
    def GET(self):
        # 连接数据库
        db_path = os.path.abspath('mydatabase.db')
        db = web.database(dbn='sqlite', db=db_path)
        
        # 创建表(如果不存在)
        db.query("""
            CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY,
                name TEXT
            )
        """)
        
        # 插入测试数据
        db.insert('users', name='test_user')
        
        # 查询数据
        users = db.select('users')
        return str(list(users))

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

关键检查点

  • SQLite在Linux/Unix下对表名大小写敏感
  • 确保CREATE TABLE和SELECT使用完全相同的表名
  • 检查.db文件是否在正确位置

一句话建议:用绝对路径连接数据库,并确保表名大小写完全一致。

没有 movie 表,看的报错信息,学 flask 吧,教程也成熟,过来人惊艳

>Connected to a transient in-memory database. Use “.open FILENAME” to reopen on a persistent database.

这个提示已经非常清楚了。你在命令行创建表的时候,连接的不是 MovieSite.db 数据库。所以 web 访问时找不到表。

crossin 教室吧,我建议你先 game,web 那篇涉及到 sql,html,关键词绕来绕去对于新手很吃力

回到顶部