【问题标题】:SQLite Flask - Can't open database file in EC2 when running db.create_all() commandSQLite Flask - 运行 db.create_all() 命令时无法在 EC2 中打开数据库文件
【发布时间】:2021-04-30 08:07:55
【问题描述】:

我刚刚将一个烧瓶应用程序部署到 EC2 AWS,当尝试使用 db.create_all(bind=['layout']) 方法初始化一个 sqlite 数据库时,显示错误

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file

这是我的代码

application.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://{}:{}@{}/{}".format(os.getenv('DB_USER'), os.getenv('DB_PASSWORD'), os.getenv('DB_SERVER'), os.getenv('DB_NAME'))
application.config['SQLALCHEMY_BINDS'] = {
    'dashboard': "postgresql://{}:{}@{}/{}".format(os.getenv('DB_USER'), os.getenv('DB_PASSWORD'), os.getenv('DB_SERVER'), os.getenv('DB_NAME')),
    'layout': "sqlite:///layout.db"
}

我在 ec2 终端的 python shell 中运行了 db.create_all(bind=['layout']),但我不知道为什么会遇到错误,因为它在我的本地主机上运行良好。

postgresql 数据库工作正常,可以正常访问,但是我尝试使用 db.create_all(bind=['layout']) 初始化的 sqlite 数据库导致上面显示的错误,我不知道为什么它不在当前目录中创建“layout.db”文件。

我是部署新手,不确定我是否做错了什么,如果我配置错误,请告诉我,谢谢!

【问题讨论】:

    标签: amazon-web-services sqlite flask amazon-ec2


    【解决方案1】:

    "sqlite:///layout.db" 可能最终指向您的应用程序没有写入权限的地方。而是尝试类似

    basedir = os.path.abspath(os.path.dirname(__file__))
    ...
    layout': 'sqlite:///' + os.path.join(basedir, 'layout.db')
    

    【讨论】:

    • 感谢您的回复,我是否可以在运行 db.create_all() 命令的同时使用“sudo”命令以某种方式“获得权限”?跨度>
    • 可以,但有风险
    猜你喜欢
    • 2020-04-23
    • 2012-02-21
    • 2015-07-04
    • 2014-11-11
    • 2014-08-30
    • 1970-01-01
    • 2011-05-24
    • 2018-05-15
    • 2021-09-12
    相关资源
    最近更新 更多