【问题标题】:Web Service returns: sqlite3.OperationalError: no such table:Web 服务返回:sqlite3.OperationalError:没有这样的表:
【发布时间】:2020-01-20 23:46:10
【问题描述】:

我正在尝试使用 Python、Flask 和 SQlite3 设置一些简单的 Web 服务。它不起作用。

没有网络服务的数据库连接有效;没有数据库连接的 Web 服务可以工作。他们一起没有。

如果我运行它,它会起作用:

import sqlite3  
conn = sqlite3.connect('scuola.db')  
sql = "SELECT matricola,cognome,nome FROM studenti"  
cur = conn.cursor()  
cur.execute(sql)  
risultato = cur.fetchall()  
conn.close()  
print(risultato)

(所以查询是正确的) 如果我运行它,它会起作用

import flask  
app = flask.Flask(__name__)
def funzione():  
    return 'Applicazione Flask'  
app.add_url_rule('/', 'funzione', funzione) 

但是如果我运行这个...

from flask import Flask  
import sqlite3  
app = Flask(__name__)
@app.route('/',methods=['GET'])  
def getStudenti():  
    conn = sqlite3.connect('scuola.db')  
    sql = "SELECT matricola,cognome,nome FROM studenti"  
    cur = conn.cursor()  
    cur.execute(sql)  
    risultato = cur.fetchall()  
    conn.close()  
    return risultato  

它在浏览器中返回内部服务器错误,并且 sqlite3.OperationalError:没有这样的表:studenti 在 DOS 提示符下。 感谢您的帮助!

【问题讨论】:

    标签: python-3.x sqlite flask


    【解决方案1】:

    您尚未提供内部服务器错误输出 - 但我的第一个猜测是您正在尝试返回从 fetchall 返回的原始 list 对象。

    从视图函数返回时,您需要通过returning a templatejsonify 发送结果以使其成为浏览器可以接收的正确HTTP 响应。

    你需要添加

    from flask import jsonify
    

    在您的导入中,然后在返回时;

    return jsonify(risultato)
    

    如果您收到类似not JSON serializable 的错误,则表示您正在尝试发送类或类似的实例。您需要确保只返回纯 Python 数据结构(例如 list/dict/str 等)。

    对于命令行问题,您需要确保已运行CREATE TABLE 命令以首先在数据库中生成表,然后再从中进行选择。还要检查您访问的是正确的sqlite 数据库文件,其中包含表。

    【讨论】:

      【解决方案2】:

      我不确定,但从外观上看,我认为您没有将烧瓶应用程序配置为支持您创建的数据库。应该有某种 app.config() 集成了数据库。

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        • 2016-02-20
        • 2018-08-18
        • 2022-01-21
        • 2021-07-24
        • 2017-09-12
        相关资源
        最近更新 更多