0

我正在尝试使用 psycopg2 python 的模块连接到 MusicBrainz 数据库。我已按照http://musicbrainz.org/doc/MusicBrainz_Server/Setup上的说明进行操作,但无法成功连接。特别是我正在使用以下小脚本:

import psycopg2
conn = psycopg2.connect( database = 'musicbrainz_db', user= 'musicbrainz', password = 'musicbrainz', port = 5000, host='10.16.65.250')
print "Connection Estabilished"

问题是当我启动它时,它永远不会到达打印语句,并且控制台(我在 linux 上)被无限期地阻塞。它甚至没有捕捉到 ctrl-c 杀死,所以我必须在另一个控制台中杀死 python 本身。什么会导致这种情况?

4

1 回答 1

1

您似乎误认为 MusicBrainz-Server 只是数据库。在端口 5000 上运行的是 Web 服务器。您可以http://10.16.65.250:5000在浏览器中访问。

Postgres 也在运行,但会监听localhost:5432. 这有效:

import psycopg2
conn = psycopg2.connect(database="musicbrainz_db",
                        user="musicbrainz", password="musicbrainz",
                        port="5432", host="localhost")
print("Connection established")

为了使 postgres 侦听的不仅仅是 localhost,您需要更改listen_addresses/etc/postgresql/9.1/main/postgres.conf为您的(客户端)主机或网络在/etc/postgresql/9.1/main/pg_hba.conf.

我的虚拟机在 192.168.1.0/24 网络中运行,所以我listen_addresses='*'在 postgres.conf 和 pg_hab.conf 中设置:

host    all             all             192.168.1.0/24          trust

我现在可以从本地网络连接到 VM 中的数据库。


根据您的实际需要,您可能不想通过 postgres 连接到 MusicBrainz 服务器。您可以在 VM 中访问MusicBrainz Web 服务。示例: http://10.16.65.250:5000/ws/2/artist/c5c2ea1c-4bde-4f4d-bd0b-47b200bf99d6。在这种情况下,您可能对处理数据的库感兴趣: python-musicbrainzngs

编辑:您需要设置musicbrainzngs.set_hostname("10.16.65.250:5000")musicbrainzngs 以连接到本地 VM。

于 2013-04-26T10:09:11.670 回答