OperationalError:在Google Cloud应用程序上尝试写入只读数据库

12 浏览
0 Comments

OperationalError:在Google Cloud应用程序上尝试写入只读数据库

最近,我一直在尝试部署一个能够写入SQLite数据库的交互式Google App Engine。当在本地运行应用程序时,一切都正常,但是当通过服务器运行时,我收到以下错误信息:\nOperationalError: 尝试写入只读数据库\n我尝试更改.db.sql文件的权限,但没有成功。\n非常感谢任何建议。

0
0 Comments

在Google Cloud Application中出现"OperationalError: Attempt to Write A ReadOnly Database"的问题是因为App Engine具有只读文件系统,也就是说无法修改文件。然而,它有一个/tmp/文件夹用于存储临时文件,正如其名称所示。实际上,它使用的是RAM,所以如果数据库很大的话,这不是一个好主意。

在应用程序启动时,您可以将原始数据库文件复制到/tmp/文件夹并从那里使用它。

这个方法是有效的。然而,当应用节点缩小到0时,数据库中的所有更改都会丢失。应用的每个节点都有自己的数据库副本,并且数据在节点之间不共享。如果您需要在应用节点之间共享数据,最好使用CloudSQL。

# 复制数据库文件到/tmp/文件夹
import shutil
shutil.copy2('/path/to/original/database.db', '/tmp/database.db')

# 连接数据库
import sqlite3
conn = sqlite3.connect('/tmp/database.db')

解决方法是将数据库文件复制到/tmp/文件夹,并通过连接/tmp/文件夹中的数据库文件来访问数据。这样可以在App Engine启动时保留数据库的更改。但请注意,当应用节点缩小到0时,所有更改都将丢失。如果需要在应用节点之间共享数据并保持更改,最好使用CloudSQL。

0
0 Comments

在Google Cloud应用程序中遇到OperationalError: Attempt to Write A ReadOnly Database问题的解决方法是尝试更改目录的权限,并检查.sqllite文件是否存在且可写。但通常情况下,在应用引擎上使用磁盘数据是不明智的,因为磁盘存储是临时的(除非您正在使用弹性环境上的持久磁盘),但即使如此,最好使用云数据库解决方案。

解决方法如下:

1. 尝试更改目录的权限,确保应用程序有写入权限。

2. 检查.sqllite文件是否存在,并确保应用程序有写入权限。

3. 不建议在应用引擎上依赖磁盘数据,因为磁盘存储是临时的。如果需要持久性数据存储,可以考虑使用弹性环境上的持久磁盘。

4. 更好的解决方案是使用云数据库解决方案,如Google Cloud的存储服务。这样可以确保数据的持久性和可靠性。

参考链接:

- [Stack Overflow: Python SQLite3 OperationalError: Attempt to Write A ReadOnly Database](https://stackoverflow.com/questions/40703228)

- [GitHub Issue: iPython OperationalError: Attempt to Write A ReadOnly Database](https://github.com/ipython/ipython/issues/4753)

- [Stack Overflow: Flask SQLAlchemy Google App Engine No Permission to Write](https://stackoverflow.com/questions/62011326)

- [Google Cloud: Pricing - Flexible Environment](https://cloud.google.com/appengine/pricing#flexible-environment-pricing)

- [Google Cloud: App Engine Storage Services](https://cloud.google.com/appengine/docs/standard/java/storage#gcp-storage-services)

0