【问题标题】:Sqlalchemy with a pgpass file带有 pgpass 文件的 Sqlalchemy
【发布时间】:2014-03-13 14:05:28
【问题描述】:

通常,与 postgres 的 SQLalchemy 连接是这样的:

postgresql://scott:tiger@localhost/mydatabase

我想知道如何在理想情况下在烧瓶中将 SQLalchemy 连接到包含密码的文件,例如 pgpass 文件。

这样的事情可能吗?

【问题讨论】:

  • .pgpass 被链接到libpq 的所有程序自动使用。如果您的应用程序/框架/Postgres 驱动程序在幕后使用libpq,那么您就设置好了。
  • 所以只要 postgres 知道密码文件在哪里,我就可以将它指向数据库而不指定用户名或密码?
  • Postgres(服务器)对此文件一无所知,您的 Postgres 应用程序/框架/Python 驱动程序(例如 psycopg)知道它是否建立在 libpq library 之上。
  • 到达这里是因为我认为 SQLALchemy 没有查看我的 .pgpass,但 @MilenA.Radev 的评论让我意识到我正在查看的脚本实际上是通过(错误地)提供 @987654328 来抢占它@。谢谢!

标签: postgresql sqlalchemy flask


【解决方案1】:

.pgpass 文件的记录格式为:

host:port:database:user:password

如果您知道您的 .pgpass 文件中只有一个条目,您可以读取如下值:

from os.path import expanduser

with open(expanduser('~/.pgpass'), 'r') as f:
    host, port, database, user, password = f.read().split(':')

database_uri = 'postgresql://{}:{}@{}:{}/{}'.format(user, password, host, port, database)

有时数据库名称可能会在文件中列为*(表示全部),然后您必须明确指定数据库。另外,如果您有多条记录,您可以使用f.readlines() 将它们全部阅读并根据您的个人条件选择您需要的一条。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多