我正在尝试使用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本身。是什么导致这个?
答案 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。