繁体   English   中英

在 Heroku 中将 psycopg2 与 Python 连接起来

[英]Connecting psycopg2 with Python in Heroku

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

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

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

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


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

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

主要步骤:

1. 进程文件

Procfile必须是:

worker: python3 folder/subfolder/myscript.py

2. Heroku 插件

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

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

3. 带有db连接的Python脚本

最后,为了在我的 python 脚本myscript.py中创建连接,我将这篇文章作为参考并将其改编为 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
            )

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

con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)

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

点安装 sqlalchemy

这是执行您想要的代码片段:

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()

如上所述,我无法使用 urllib.parse 解析 Heroku 提供的 DATABASE_URL,但以下内容对我有用:

我从 Heroku 检索到的 URL 格式如下:

postgres://username:password@host:port/database

例如:

postgres://jticiuimwernbk:ff78903549d4c6ec13a53a8ffefcd201b937d54c35d976 @ec2-52-123-182-987.compute-1.amazonaws.com:5432/dbsd4fdf6c1awq

所以我手动剖析如下:

user = 'jticiuimwernbk'
password = 'ff78903549d4c6ec13a53a8ffefcd201b937d54c35d976'
host = 'ec2-52-123-182-987.compute-1.amazonaws.com'
port = '5432'
database = 'dbsd4fdf6c1awq'
    
#Then created the connection using the above:
    
con = psycopg2.connect(database=database,
user=user,
password=password,
host=host,
port=port)

# and now I was able to perform queries:

cur = conn.cursor()
results = cur.execute("<some SQL query>;").fetchall()
cur.close()
conn.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM