使用 SQLAlchemy 通过 unix 套接字连接到数据库

Posted

技术标签:

【中文标题】使用 SQLAlchemy 通过 unix 套接字连接到数据库【英文标题】:Connect to a database over a unix socket using SQLAlchemy 【发布时间】:2019-07-24 20:17:54 【问题描述】:

我正在尝试使用我的云函数中的 SQLAlchemy 连接到我的 Cloud SQL DB,但我似乎无法计算出正确的连接字符串。

DATABASE_URL=postgres://$DB_USER:$_DB_PWD@/$DB_NAME?unix_socket=/cloudsql/$DB_INSTANCE

这给了我错误:

pyscopg2.ProgrammingError: invalid dns: invalid connection option "unix_socket"

使用pyscopg2 通过 unix 套接字连接到 Postgresql 9.6 DB 的正确方法是什么?

【问题讨论】:

【参考方案1】:

这里需要的特殊关键字是host

DATABASE_URL=postgres://user:password@/dbname?host=/path/to/db

注意host 中的路径应该是路径,而不是套接字文件本身(psycopg2 假定套接字具有标准命名约定.s.PGSQL.5432

https://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#unix-domain-connections

【讨论】:

无论出于何种原因,这对我不起作用,我也面临着 OP 的问题。 对我有用,确保不要在连接字符串的末尾添加“.s.PGSQL.5432”,只添加它所在的目录 我认为您目前(2021 年)需要 postgresql 而不是 postgres 即使链接的文档也没有明确说明将端口放在哪里,用户“fred”通过“/tmp/big_db_sockets/.s.PGSQL”中的套接字连接到 db“big_db”的试验和错误.1234" 似乎是:postgresql://fred@:1234/big_db?host=/tmp/big_db_sockets

以上是关于使用 SQLAlchemy 通过 unix 套接字连接到数据库的主要内容,如果未能解决你的问题,请参考以下文章

通过 Unix 域套接字发送结构

如果我的mysql套接字不在/ tmp中,是否可以将Mysql与SqlAlchemy和Flask一起使用?

Finder Sync 扩展:无法通过 UNIX 域套接字进行通信

关于通过(unix-)套接字发送/接收大量数据的另一个困惑

将 Python xmlrpclib 与 unix 域套接字一起使用?

如何通过 Mac OS X 上的 Unix 域套接字传递用户凭据?