OperationalError:没有这样的表格:在任何地方都可以找到有关python的书籍

时间:2019-02-07 18:38:34

标签: python sqlite flask pythonanywhere

我在python的任何地方都有一个文件结构:

flaskhost(文件夹),其中包含:

  1. app.py
  2. books.db

app.py包含-:

import flask
from flask import request, jsonify
import sqlite3

app = flask.Flask(__name__)
app.config["DEBUG"] = True

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d


@app.route('/', methods=['GET'])
def home():
    return '''<h1>Distant Reading Archive</h1>
<p>A prototype API for distant reading of science fiction novels.</p>'''


@app.route('/api/v1/resources/books/all', methods=['GET'])
def api_all():
    conn = sqlite3.connect('books.db')
    conn.row_factory = dict_factory
    cur = conn.cursor()
    all_books = cur.execute('SELECT * FROM books;').fetchall()

    return jsonify(all_books)



@app.errorhandler(404)
def page_not_found(e):
    return "<h1>404</h1><p>The resource could not be found.</p>", 404


@app.route('/api/v1/resources/books', methods=['GET'])
def api_filter():
    query_parameters = request.args

    id = query_parameters.get('id')
    published = query_parameters.get('published')
    author = query_parameters.get('author')

    query = "SELECT * FROM books WHERE"
    to_filter = []

    if id:
        query += ' id=? AND'
        to_filter.append(id)
    if published:
        query += ' published=? AND'
        to_filter.append(published)
    if author:
        query += ' author=? AND'
        to_filter.append(author)
    if not (id or published or author):
        return page_not_found(404)

    query = query[:-4] + ';'

    conn = sqlite3.connect('books.db')
    conn.row_factory = dict_factory
    cur = conn.cursor()

    results = cur.execute(query, to_filter).fetchall()

    return jsonify(results)

if __name__ == '__main__':
    app.run()

我正在尝试遵循本教程

  

https://programminghistorian.org/en/lessons/creating-apis-with-python-and-flask

我的网站托管在:

  

http://vivanks.pythonanywhere.com

但是当我通过

调用api时
  

http://127.0.0.1:5000/api/v1/resources/books?author=Connie+Willis

显示错误:

  

sqlite3.OperationalError:没有这样的表:books

是否有帮助解决此问题并在pythonanywhere.com上托管应用?

P.S在我的本地计算机上运行正常

1 个答案:

答案 0 :(得分:4)

在Pythonanywnere上,当指向模板或静态文件(存储在其自己的正确目录中,可以由flask访问)以外的内容时,您必须提供完整路径:

conn = sqlite3.connect('/home/your_username/flaskhost/books.db')