获取相对于执行烧瓶app的路径

时间:2017-06-12 13:50:35

标签: python sqlite flask

在我的烧瓶应用程序中,我在每次开始时重新创建一个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命令失败并显示:

  

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

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

1 个答案:

答案 0 :(得分:2)

这个确切的用例恰好是烧瓶的/myapplication.py /schema.sql /static /style.css /templates /layout.html /index.html API call文档中使用的示例,以及您问题中链接的蓝图文档。

具体而言,参考文档说:

  

要了解其工作原理,请考虑以下文件夹结构:

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

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

A