首页 > 解决方案 > Flask-SQLAlchemy & Google App Engine - 没有写权限

问题描述

主文件

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = '123'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)


class User(db.Model):
    __table_name__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(80))

    def __init__(self, username, password):
        self.username = username
        self.password = password

@app.route('/register/', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        """Check username is available"""
        data = User.query.filter_by(username=username).first()
        if data is None:
            new_user = User(username=username, password=password)
            db.session.add(new_user)
            db.session.commit()
            return redirect(url_for('login'))
        return render_template('register2.html')
    return render_template('register1.html')

我通过 Google App Engine 部署了我的网络应用程序,但是当我尝试注册时,我目前在 Google App Engine 上遇到操作错误。

OperationalError: (sqlite3.OperationalError) 尝试写入只读数据库

似乎文件在 Google App Engine 存储中是只读的。

有没有办法在 GAE 中编写 .db 文件?

标签: pythongoogle-app-engineflasksqlalchemyflask-sqlalchemy

解决方案


App Engine 不支持写入本地文件,这主要是因为 App Engine 通过创建多个并行实例来扩展您的应用程序的方式。如果不是这种情况,并且您继续写入每个本地文件系统中的文件,则会产生不一致,这不是您想要的。

理想情况下,对于 App Engine,您应该使用以下设置:

  • 对于 DB 存储:使用基于云的数据库,就您而言,我相信您可以使用 CloudSQL,但您可以在此处找到 Google Cloud 为数据库提供的产品,以查看更适合您的应用程序。

  • 对于文件存储:使用云文件存储系统。谷歌云为此提供了云存储产品,您可以在此处查看更多详细信息。


推荐阅读