http://www.stickpeople.com/projects/python/win-psycopg/ 这里是windows下的下载安装链接,请选择跟你安装的python的版本一致的版本下载安装,cmd下输入:python -V,查看本地python版本号。
安装完毕以后就可以写代码测试了,我的测试环境是windows下安装了postgresql数据库,执行的python代码在虚拟机的Ubuntu下,其实拿到windows执行也是没问题的,
代码如下:
import psycopg2
import psycopg2.extras
DATABASE_HOST = "192.168.8.66" #要链接的服务器的IP地址,我本地windows系统的IP为192.168.8.66
DATABASE_PORT = 5432 #postgresql端口号,安装postgresql时设置的,一般默认是5432
DATABASE_NAME = "testdb" #数据库名称
DATABASE_USERNAME = "postgres" #用户名,这里的用户名也是在安装postgresql时设置的,一般默认postgres
DATABASE_PASSWORD = "123456" #链接数据库服务器的密码,安装时设置,安装完毕后可以修改的
class Mydb():
def __init__(
self,
host=DATABASE_HOST,
port=DATABASE_PORT,
user=DATABASE_USERNAME,
password=DATABASE_PASSWORD,
database=DATABASE_NAME):
print host,port,user,password,database
self.conn = psycopg2.connect(
host = host,
port = port,
user = user,
password = password,
database = database)
self.cursor = self.conn.cursor(
cursor_factory = psycopg2.extras.DictCursor)
self.result = None
def getNextOne(self,):
self.result = self.cursor.fetchone()
return self.result
def getAll(self,):
self.result = self.cursor.fetchall()
return self.result
def getCurrentOne(self,):
return self.result
def runsql(self,sql):
return self.cursor.execute(sql)
def close(self,):
self.cursor.close()
self.conn.close()
def rowcount(self,):
return self.cursor.rowcount
def commit(self,):
return self.conn.commit()
if __name__ == "__main__":
print "begin"
db = Mydb()
db.runsql('select * from config_road')
rows = db.cursor.fetchall()
for i in rows:
print i
print db.cursor.rowcount
以上就是链接和一些操作的函数代码,可以看到,非常的简单的。
因为默认的
self.cursor = self.conn.cursor()
的结果返回的是元组,因此在代码中使用下面的方式
self.cursor = self.conn.cursor(
cursor_factory = psycopg2.extras.DictCursor)
这使得返回结果是字典
下面就说一下链接是会遇到的一些问题:
如果链接不上服务器的数据库,
首先检查C:\Program Files (x86)\PostgreSQL\9.0\data\pg_hba.conf这个文件的配置是否正确,
比如,我windows的IP地址是192.168.8.66,虚拟机的Ubuntu系统的IP是192.168.8.22
这样的话只需在# IPv4 local connections:下面添加如下一行即可。
host all all 192.168.8.0/24 md5
上面那一行的意思是允许IP地址在192.168.8.0--192.168.8.255之间的机器连接到这个服务器,
这个文件一开始默认的应该是
host all all 127.0.0.1/32 md5
意思是只允许本地机器连接该数据库,/24和/32的区别是,24表示地址不固定,32表示地址固定的
检查完上述文件以后再检查C:\Program Files (x86)\PostgreSQL\9.0\data\stgresql.conf的配置,在这个文件中找到listen_addresses = 'localhost',将这一句改为listen_addresses = '*'即可。
最后的最好,如果还是连不上,那就只能放大招了,检查Windows防火墙是否打开,如果打开,请关闭