在我的烧瓶应用程序中,我每次启动时都会重新创建一个sqlite数据库。
为此,我使用official webpage上所示的代码

我的项目结构如下所示

project_dir/
|-README.md
`-app/
  |-StubbyServer.py (contains the flask root)
  |-schema.sql
  `- (all the other files)


现在,我的StubbyServer.py包含:

def get_db():
    db = getattr(Flask, '_database', None)
    if db is None:
        db = Flask._database = sqlite3.connect(DATABASE)
        with open('schema.sql', mode='r') as f:
            db.cursor().executescript(f.read())
        db.commit()
        db.row_factory = sqlite3.Row
    return db


如果我的工作目录为/path/project_dir/app,则命令python StubbyServer.py可以正常工作

如果我的工作目录是/path/project_dir,则命令python app/StubbyServer.py失败,并显示:


  get_db中的文件“ app / StubbyServer.py”,第43行
      与open('schema.sql',mode ='r')as f:
  FileNotFoundError:[错误2]没有这样的文件或目录:'schema.sql'


我知道为什么会这样,但是我不知道该如何解决。
我希望我的烧瓶应用程序能够独立于当前工作目录正常运行,该如何实现?

最佳答案

这个确切的用例恰好是烧瓶open_resource API call的文档以及问题中链接的蓝图文档中使用的示例。

具体来说,参考文档说:


  若要查看其工作原理,请考虑以下文件夹结构:

/myapplication.py
     /schema.sql
     /static
         /style.css
     /templates
         /layout.html
         /index.html

  
  如果要打开schema.sql文件,请执行以下操作:

 with app.open_resource('schema.sql') as f:
     contents = f.read()
     do_something_with(contents)

关于python - 获取相对于已执行 flask 应用程序的路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44501130/

10-11 22:51