使用psycopg2连接到MusicBrainz数据库时出现问题

时间:2013-04-25 17:52:41

标签: python postgresql psycopg2 musicbrainz

我正在尝试使用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"

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

1 个答案:

答案 0 :(得分: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网络中运行,因此我在postgres.conf和pg_hab.conf中设置了listen_addresses='*'

host    all             all             192.168.1.0/24          trust

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


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

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