Flask -SQLAlchemy & Google App Engine - нет разрешения на запись - PullRequest
1 голос
/ 26 мая 2020

Main.py

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.

Есть ли способ записи. db в GAE?

1 Ответ

0 голосов
/ 26 мая 2020

Запись в локальные файлы не поддерживается в App Engine. Это в основном связано с тем, как App Engine масштабирует ваше приложение путем создания нескольких параллельных экземпляров. Если это не так и вы продолжаете записывать файлы в каждой локальной файловой системе, будут сгенерированы несоответствия, а это не то, что вам нужно.

В идеале для App Engine вы должны использовать следующую настройку:

  • Для хранилища БД: используйте облачную базу данных, в вашем случае я считаю, что вы могли бы использовать Cloud SQL, но вы можете найти продукт, который Google Cloud предлагает для баз данных здесь , чтобы узнать, какое приложение лучше подходит вам.

  • Для файлового хранилища: используйте облачную систему хранения файлов. Google Cloud предлагает продукт Cloud Storage для этой цели, вы можете проверить более подробную информацию здесь .

...