从树莓派连接Heroku Postgres数据库,如何获取psycopg2参数?
获取Heroku Postgres数据库连接参数的方法
嘿,这个问题我刚好处理过,给你一步步拆解怎么拿到dbname、user、password、host这些参数:
核心前提:Heroku的Postgres连接信息存在DATABASE_URL环境变量里
Heroku会把Postgres数据库的所有连接信息打包成一个URL格式的环境变量DATABASE_URL,我们只需要解析它就能拿到所有需要的参数。
方法1:用Heroku CLI直接查看并拆解
这是最直接的方式:
- 首先确保你本地装了Heroku CLI,并且已经登录了你的Heroku账号(登录用
heroku login命令即可)。 - 运行命令:
heroku config:get DATABASE_URL -a 你的应用名称,把你的应用名称换成你部署在Heroku上的Django应用的名字。 - 你会得到一个类似这样的字符串:
postgres://abc123def:xyz789uvw@ec2-12-34-56-78.compute-1.amazonaws.com:5432/d987654321gh - 现在拆解这个URL:
user:postgres://之后、第一个冒号:之前的部分,上面例子里就是abc123defpassword:第一个冒号:之后、@符号之前的部分,例子里是xyz789uvwhost:@符号之后、冒号:之前的部分,例子里是ec2-12-34-56-78.compute-1.amazonaws.comdbname:最后一个斜杠/之后的部分,例子里是d987654321gh
方法2:从Django生产环境配置里提取
如果你的Django应用已经在Heroku上正常运行,它已经自动解析了DATABASE_URL并配置了数据库,你可以直接查看这些参数:
- 登录Heroku控制台,找到你的应用,进入「Settings」标签页,在「Config Vars」里找到
DATABASE_URL,和方法1一样拆解就行。 - 或者用Heroku CLI进入应用的shell:
heroku run python manage.py shell -a 你的应用名称,然后在shell里执行:
直接就能看到所有参数。from django.conf import settings print(settings.DATABASES['default']['NAME']) # 对应dbname print(settings.DATABASES['default']['USER']) print(settings.DATABASES['default']['PASSWORD']) print(settings.DATABASES['default']['HOST'])
方法3:在Python程序里自动解析DATABASE_URL
如果你的树莓派程序需要自动处理这个URL,可以用Python的urllib.parse模块来解析,不用手动拆解:
from urllib.parse import urlparse import psycopg2 # 替换成你从Heroku拿到的DATABASE_URL database_url = "postgres://abc123def:xyz789uvw@ec2-12-34-56-78.compute-1.amazonaws.com:5432/d987654321gh" url = urlparse(database_url) dbname = url.path[1:] # 去掉路径开头的斜杠 user = url.username password = url.password host = url.hostname # 注意:Heroku Postgres要求SSL连接,所以要加上sslmode='require' conn = psycopg2.connect( dbname=dbname, user=user, password=password, host=host, sslmode='require' )
重要提醒
一定要记得在psycopg2.connect里加上sslmode='require'参数,Heroku的Postgres数据库默认要求SSL连接,不加的话会连接失败哦。
内容的提问来源于stack exchange,提问作者The Pike
相关产品推荐
相关产品推荐

