Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLAlchemy在Unix套接字或IPv4之前通过IPv6尝试PostgreSQL连接_Postgresql_Sqlalchemy - Fatal编程技术网

SQLAlchemy在Unix套接字或IPv4之前通过IPv6尝试PostgreSQL连接

SQLAlchemy在Unix套接字或IPv4之前通过IPv6尝试PostgreSQL连接,postgresql,sqlalchemy,Postgresql,Sqlalchemy,如何确保我与PostgreSQL的SQLAlchemy连接通过Unix套接字甚至IPv4?它将仅通过IPv6连接 我将create_引擎配置为@localhost,但请注意主机IPv6主机:1“底部出现故障。我特意删除了pg_hba.conf(见下文)中的IPv6信任以显示错误。如果我取消注释该行,它将通过IPv6成功连接,并跳过Unix和IPv4 >>> from sqlalchemy import * db = create_engine('postgresql://vad

如何确保我与PostgreSQL的SQLAlchemy连接通过Unix套接字甚至IPv4?它将仅通过IPv6连接

我将create_引擎配置为@localhost,但请注意主机IPv6主机:1“底部出现故障。我特意删除了pg_hba.conf(见下文)中的IPv6信任以显示错误。如果我取消注释该行,它将通过IPv6成功连接,并跳过Unix和IPv4

>>> from sqlalchemy import *
db = create_engine('postgresql://vaderade@localhost:5432/mydb', echo=True)
>>> metadata = MetaData(db)
>>> users = Table('users', metadata,
... Column('user_id', Integer, primary_key=True),
... Column('name', String(40)),
... Column('age', Integer),
... Column('password', String),
... )
>>> users.create()
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 1044, in _do_get
    return self._pool.get(wait, self._timeout)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/util/queue.py", line 145, in get
    raise Empty
sqlalchemy.util.queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 2074, in _wrap_pool_connect
    return fn()
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 376, in connect
    return _ConnectionFairy._checkout(self)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 713, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 480, in checkout
    rec = pool._do_get()
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 1060, in _do_get
    self._dec_overflow()
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
    raise value
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 1057, in _do_get
    return self._create_connection()
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 323, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 449, in __init__
    self.connection = self.__connect()
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/pool.py", line 607, in __connect
    connection = self.__pool._invoke_creator(self)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/engine/strategies.py", line 97, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/local/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 385, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/local/lib/python3.5/site-packages/psycopg2/__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  no pg_hba.conf entry for host "::1", user "vaderade", database "mydb", SSL off
来自/var/lib/pgsql/9.5/data/pg_hba.conf的相关信息

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
来自/var/lib/pgsql/9.5/data/postgresql.conf的相关信息

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = 'localhost'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432                             # (change requires restart)
具体内容:

  • 红帽7.2
  • PostgreSQL 9.5.4
  • Python 3.5.2
  • SQLAlchemy==1.0.14
  • psycopg2==2.6.2

当您使用
localhost
时,它将通过系统中配置的任何东西使用TCP连接来响应
localhost
。在Linux上,它通常映射到
/etc/hosts
,通常是IPv4
127.0.0.1
或IPv6
::1
(这可能是您的情况)

现在,如果您想在本地连接,您可以选择:

  • postgresql://vaderade@localhost:5432/mydb
    :通过TCP本地主机连接(如果IPv4或IPv6取决于您的系统)
  • postgresql://vaderade@127.0.0.1:5432/mydb
    :通过TCP IPv4本地主机连接
  • postgresql://vaderade@[::1]:5432/mydb
    :通过TCP IPv6本地主机连接
  • postgresql://vaderade@:5432/mydb
    :通过默认的unix域套接字位置连接(这是您正在寻找的答案)
  • postgresql://vaderade@:5432/mydb?主机=/path/to/socket
    :通过unix域套接字在
    /path/to/socket的非默认位置连接

使用
127.0.0.1
而不是
localhost
。哇。非常感谢。这就成功了。谢谢你添加的细节。一旦univerio提到了这一点,localhost部分就有了意义,但这是我希望进行身份验证的方式。您可以添加
postgresql://@:5432/mydb
,它将使用当前用户