如何使用 Django 保存到远程服务器

How to save to a remote server with Django

我对 Python 和 Django 还很陌生。我最近有一个 Django 应用程序在 Linux Mint 18.3 的本地主机上运行,​​带有 Postgresql 数据库。

我已将应用程序上传到 PythonAnywhere,但遗憾的是它需要 Java 才能使用某些 NLP 功能 (Stanford POS)。有没有办法在本地系统上解析和处理数据并将其保存到远程 Postgres 数据库并提供来自远程服务器的数据?

我在这里查看了一些关于 SSH 隧道的答案,但我不确定这是否适用于此?或者是否可以保存到本地数据库并定期将数据迁移到远程数据库?

是的,您只需使用 Django DATABASES 设置将本地环境连接到远程数据库 https://docs.djangoproject.com/en/2.0/ref/settings/#databases

注意在文档中使用你的 Django 版本(这里是 2.0)

这样你就可以从你的本地环境写入,并从你的远程服务器读取(使用相同的设置连接到你的远程数据库)

是——要从本地计算机访问 PythonAnywhere Postgres 数据库,您需要使用 SSH 隧道。如果您在本地计算机上使用 Unix-like 操作系统(例如 Linux 或 Mac),this help page 底部的 "Manual SSH tunnelling" 指令将通过一些调整来处理这个问题。

帮助页面上的SSH命令是:

ssh -L 3306:username.mysql.pythonanywhere-services.com:3306 username@ssh.pythonanywhere.com

...如您所见,它用于 MySQL。要使其适用于您的 PythonAnywhere Postgres 服务器,请替换:

  • 第一个 33065432 (这意味着在您的本地计算机上,它将使用默认的 Postgres 端口)
  • 带有 Postgres 服务器主机名的 username.mysql.pythonanywhere-services.com 来自 PythonAnywhere "Databases" 页面上的 "Postgres" 选项卡。
  • 第二个 3306 端口来自 PythonAnywhere "Databases" 页面上的 "Postgres" 选项卡。

所以你会得到类似

的东西
ssh -L 5432:username-123.postgres.pythonanywhere-services.com:10123 username@ssh.pythonanywhere.com

...username12310123 具有不同的值。

当您 运行 该命令(并输入您的 PythonAnywhere 登录密码,它会提示您输入)时,一个进程将在您的机器上启动,对于所有本地进程来说它看起来像一个 Postgres 服务器,但是实际上只是将所有内容来回转发到 PythonAnywhere-hosted 数据库服务器。因此,您可以 运行 在本地解析和处理代码,它会透明地工作。