【问题标题】:How to save to a remote server with Django如何使用 Django 保存到远程服务器
【发布时间】:2018-08-12 12:37:38
【问题描述】:

我对 Python 和 Django 还很陌生。我最近有一个 Django 应用程序在 Linux Mint 18.3 的 localhost 上使用 Postgresql 数据库运行。

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

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

【问题讨论】:

    标签: django postgresql remote-access pythonanywhere


    【解决方案1】:

    是的——要从本地计算机访问 PythonAnywhere Postgres 数据库,您需要使用 SSH 隧道。如果您在本地机器上使用类 Unix 操作系统(例如 Linux 或 Mac),this help page 底部的“手动 SSH 隧道”说明将通过一些调整来处理这个问题。

    帮助页面上的SSH命令是:

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

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

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

    所以你会得到类似的东西

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

    ...username12310123 具有不同的值。

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

    【讨论】:

    • 这似乎将终端连接到 PythonAnywhere 本地主机,但是当我使用单独的终端执行解析脚本时,出现以下错误:conn = _connect(dsn, connection_factory=connection_factory, **kwasync) psycopg2.OperationalError: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?'
    • 您能否在连接后截取运行 SSH 命令的终端的屏幕截图,并在此处发布指向它的链接(当然,删除任何秘密内容)?
    • 请查看以下链接中的图片:imgur.com/a/EJQqW。任何帮助将不胜感激。
    • OK,这样看起来一切正常。如果您(在本地计算机上)运行命令lsof | grep LISTEN | grep 5432,您会得到什么
    • 没关系,我刚刚开始工作。看起来我只需要关闭并打开一个新终端,而不是使用在打开 SSH 隧道之前已经打开的终端。
    【解决方案2】:

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

    请注意在文档中使用您的 Django 版本(此处为 2.0)

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

    【讨论】:

    • 我之前尝试过,但这不允许从我的本地应用程序访问。
    • 您的数据库在哪里托管?
    • pythonanywhere.com。也提供了答案的 Giles 是那里的支持团队之一。
    猜你喜欢
    • 2017-03-23
    • 2010-11-25
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多