您的位置:首页 > 编程语言 > Python开发

python链接postgresql数据库

2015-10-23 20:34 651 查看
    python链接数据库使用了psycopg2这个模块,这个模块的安装可以到其官网上下载安装:

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防火墙是否打开,如果打开,请关闭


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: