求助:Google Cloud文件写入失败及本地SQLite数据库只读错误
解决sqlite3 "attempt to write a readonly database" 及Google Cloud文件写入问题
本地开发环境的只读数据库错误修复
检查文件与目录权限
确保数据库文件和所在目录都具备写入权限:- Linux/macOS终端执行:
chmod 664 Database/accounts.db chmod 775 Database - Windows系统右键
accounts.db和Database文件夹,在「属性-安全」中给当前用户添加写入权限。
- Linux/macOS终端执行:
使用绝对路径连接数据库
Flask运行时的工作目录可能和预期不一致,用项目根目录的绝对路径避免路径错误:import os import sqlite3 from flask import Flask app = Flask(__name__) # 拼接数据库绝对路径 db_full_path = os.path.join(app.root_path, "Database", "accounts.db") con = sqlite3.connect(db_full_path)替换不安全的SQL拼接方式
原代码用f-string直接拼接SQL存在注入风险,改用参数化查询同时避免语法错误:cur.execute("INSERT INTO Requests (Type, Argument, Priority, Time) VALUES (?,?,?,?)", (a, b, c, d))
Google Cloud环境的文件写入问题解决
Google Cloud的App Engine、Cloud Run等服务默认使用只读文件系统,无法直接写入本地sqlite数据库,推荐以下方案:
- 改用Cloud SQL托管数据库:直接连接Google Cloud提供的Cloud SQL服务(支持MySQL、PostgreSQL,也可兼容sqlite使用),规避本地文件写入限制。
- 禁用本地sqlite存储:若必须用文件存储,可考虑将数据库文件存到Cloud Storage,但sqlite本身不适合远程文件系统,会存在性能和数据一致性问题,不建议采用。
内容的提问来源于stack exchange,提问作者Yen
相关产品推荐
相关产品推荐

