11

構築中のダッシュボードに既存のsqlite3dbをフックしようとしていますが、解決方法がわからないという問題が発生しました。私はFlaskのドキュメントや他のソースからのものをつなぎ合わせようとしてこれに取り組んできたので、ここで少し奇妙に見えるものについて私に電話してください。それはおそらくそうです、そして私はそれを知りません:)

コード:

from __future__ import with_statement
from contextlib import closing
from flask import Flask, render_template, request, session, g, redirect, url_for, abort, flash
import sqlite3

#config
DATABASE = '~/home/aaron/Dropbox/coding/webapp2/tmp/test.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

app = Flask(__name__)
app.config.from_object(__name__)

def connect_db():
    return sqlite3.connect(app.config['DATABASE']) # LINE 17


@app.before_request
def before_request():
    g.db = connect_db() # LINE 22

@app.teardown_request
def teardown_request(exception):
    if hasattr(g, 'db'):
        g.db.close()

# App seems to error out before app.route and if __name__=='__main__' block
# Everything in my app.route is commented out

完全なエラー:

トレースバック(最後の最後の呼び出し):ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、行1701、 呼び出し中 return self.wsgi_app(environ、start_response)ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、行1689、wsgi_app response = self.make_response(self.handle_exception(e) )ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、行1687、wsgi_app response = self.full_dispatch_request()ファイル "/usr/local/lib/python2.7/ dist-packages / flask / app.py "、1360行、full_dispatch_request rv = self.handle_user_exception(e)ファイル" /usr/local/lib/python2.7/dist-packages/flask/app.py "、1356行、full_dispatch_request rv = self.preprocess_request()ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、1539行目、preprocess_request rv = func()ファイル "/ home / aaron /Dropbox/coding/webapp2/control.py "、22行目before_request g.db = connect_db()ファイル "/home/aaron/Dropbox/coding/webapp2/control.py"、17行目、connect_db return sqlite3.connect(app.config ['DATABASE'])OperationalError:できませんデータベースファイルを開く

127.0.0.1 --- [13 / Oct / 2012 13:55:48] "GET /?debugger = yes&cmd = resource&f = style.css HTTP / 1.1" 200-127.0.0.1 --- [13 / Oct / 2012 13:55 :48] "GET /?debugger = yes&cmd = resource&f = jquery.js HTTP / 1.1" 200-127.0.0.1 --- [13 / Oct / 2012 13:55:48] "GET /?debugger = yes&cmd = resource&f = debugger .js HTTP / 1.1 "200-127.0.0.1 --- [13 / Oct / 2012 13:55:48]" GET /?デバッガ= yes&cmd = resource&f = console.png HTTP / 1.1 "200-127.0.0.1 --- [ 2012年10月13日13:55:48]"GET/?デバッガ= yes&cmd = resource&f = source.png HTTP / 1.1" 200-127.0.0.1 ---[2012年10月13日13:55:49]"GET/ favicon.ico HTTP / 1.1 "500-

トレースバック(最後の最後の呼び出し):ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、行1701、 呼び出し中 return self.wsgi_app(environ、start_response)ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、行1689、wsgi_app response = self.make_response(self.handle_exception(e) )ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、行1687、wsgi_app response = self.full_dispatch_request()ファイル "/usr/local/lib/python2.7/ dist-packages / flask / app.py "、1360行、full_dispatch_request rv = self.handle_user_exception(e)ファイル" /usr/local/lib/python2.7/dist-packages/flask/app.py "、1356行、full_dispatch_request rv = self.preprocess_request()ファイル "/usr/local/lib/python2.7/dist-packages/flask/app.py"、1539行目、preprocess_request rv = func()ファイル "/ home / aaron /Dropbox/coding/webapp2/control.py "、22行目before_request g.db = connect_db()ファイル "/home/aaron/Dropbox/coding/webapp2/control.py"、17行目、connect_db return sqlite3.connect(app.config ['DATABASE'])OperationalError:できませんデータベースファイルを開く

問題は次の設定行から発生しているようです。

DATABASE = '~/home/aaron/Dropbox/coding/webapp2/tmp/test.db'

私の質問:

1)OperationalErrorが2回スローされるのはなぜですか?

2)これらは関数定義であり、関数呼び出しではないのに、なぜ各OperationalErrorが17行目と22行目(上記のコードでコメントされている)を呼び出すのですか?

3)これが指定されたパスにデータを持つ有効なデータベースである場合、エラーを解決するにはどうすればよいですか?

これらは私が参照しているものです:

http://flask.pocoo.org/docs/tutorial/dbcon/#tutorial-dbcon

http://flask.pocoo.org/docs/tutorial/views/#tutorial-views

http://flask.pocoo.org/docs/patterns/sqlite3/

4

2 に答える 2

11

問題は~文字(シェルでは有効だがPythonでは無効)にあると思うので、おそらく完全な絶対パスを記述する必要があります。私は Flask を使用していませんが、設定で PROJECT_ROOT 定数を設定し、相対パスを使用することをお勧めします。

import os

PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))

DATABASE = os.path.join(PROJECT_ROOT, 'tmp', 'test.db')
于 2012-10-13T19:58:41.443 に答える