【问题标题】:Connecting psycopg2 with Python in Heroku在 Heroku 中将 psycopg2 与 Python 连接起来
【发布时间】:2017-06-08 07:34:10
【问题描述】:

几天来,我一直在尝试在没有 Django 的情况下将我的 python 3 脚本连接到 Heroku 中的 PostgresSQL 数据库(psycopg2)。

我找到了一些文章和相关问题,但我不得不花费大量时间来获得一些我认为应该非常简单的东西,即使对于像我这样的新手也是如此。

我最终以某种方式使其工作,但希望发布问题(和答案)将帮助其他人更快地实现它。

当然,如果有人有更好的方法,请分享。


正如我所说,我有一个 python 脚本,我想使用 Heroku 从云中运行它。不涉及 Django(只是一个脚本/刮板)。

一开始我觉得有帮助的文章,即使它们还不够:

【问题讨论】:

    标签: python postgresql python-3.x heroku psycopg2


    【解决方案1】:

    主要步骤:

    1.配置文件

    Procfile 必须是:

    worker: python3 folder/subfolder/myscript.py
    

    2。 Heroku 插件

    插件Heroku Postgres :: Database 必须添加到heroku 帐户中相应的个人应用程序中。

    为了确保正确设置,this 非常有帮助。

    3.带有数据库连接的 Python 脚本

    最后,为了在我的 python 脚本myscript.py 中创建连接,我将this article 作为参考并将其改编为 Python 3:

    import psycopg2
    import urllib.parse as urlparse
    import os
    
    url = urlparse.urlparse(os.environ['DATABASE_URL'])
    dbname = url.path[1:]
    user = url.username
    password = url.password
    host = url.hostname
    port = url.port
    
    con = psycopg2.connect(
                dbname=dbname,
                user=user,
                password=password,
                host=host,
                port=port
                )
    

    要创建一个新数据库,this SO question 会解释它。关键是:

    con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
    

    【讨论】:

    【解决方案2】:

    您可以使用 SQLALCHEMY 库来完成。 首先,您需要使用 pip 安装 SQLALCHEMY 库,如果您的计算机上没有安装 pip,您将知道如何使用简单的 google 搜索

    pip 安装 sqlalchemy

    这里是代码 sn-p 做你想做的事:

    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session, sessionmaker
    import os
    
    # Put your URL in an environment variable and connect.
    engine = create_engine(os.getenv("DATABASE_URL"))
    db = scoped_session(sessionmaker(bind=engine))
    
    # Some variables you need.
    var1 = 12
    var2 = "Einstein"
    # Execute statements
    db.execute("SELECT id, username FROM users WHERE id=:id, username=:username"\
               ,{"id": var1, "username": var2}).fetchall()
    
    # Don't forget to commit if you did an insertion,etc...
    db.commit()
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 2017-06-03
      • 2020-03-30
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      相关资源
      最近更新 更多