python链接postgresql数据库

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


### 如何通过 Python 连接到 PostgreSQL 数据库 Python 可以通过 `psycopg2` 库与 PostgreSQL 数据库建立连接并执行查询操作。以下是详细的说明以及示例代码。 #### 1. 安装 `psycopg2` 为了能够使用 Python 操作 PostgreSQL 数据库,需要先安装 `psycopg2` 模块。可以通过以下命令完成安装: ```bash pip install psycopg2 ``` 如果遇到任何依赖问题或者性能需求较高的场景,也可以考虑安装二进制优化版的 `psycopg2-binary`[^2]: ```bash pip install psycopg2-binary ``` #### 2. 建立数据库连接 在成功安装 `psycopg2` 后,可以利用其功能创建一个到 PostgreSQL 的连接对象。下面是一个基本的例子展示如何实现这一点: ```python import psycopg2 try: connection = psycopg2.connect( user="your_username", password="your_password", host="localhost", port="5432", database="your_database_name" ) cursor = connection.cursor() # 执行 SQL 查询语句 cursor.execute("SELECT version();") db_version = cursor.fetchone() # 获取单条记录 print(f"Connected to {db_version}") except (Exception, psycopg2.Error) as error : print ("Error while connecting to PostgreSQL", error) finally: if(connection): cursor.close() connection.close() print("PostgreSQL connection is closed") ``` 上述脚本展示了如何设置参数来初始化一个连接实例,并尝试读取当前运行中的 PostgreSQL 版本号作为测试。 #### 3. 插入数据至表中 除了简单的查询外,还可以向已存在的表格里写入新纪录。这里给出一段示范性的插入逻辑代码片段: ```python insert_query = """ INSERT INTO mobile(id, model, price) VALUES (%s,%s,%s)""" record_to_insert = ('N', 'iPhone XS Max Pro', 1000) cursor.execute(insert_query, record_to_insert) connection.commit() print(cursor.rowcount,"Record inserted successfully into mobile table") ``` 这段程序定义了一条SQL指令用于新增一条手机型号及其价格的信息,并提交更改给数据库确认保存。 #### 4. 处理事务 当涉及到多步更新或删除动作时,应该特别注意保持一致性原则。这通常意味着要正确运用事务控制机制。例如,在批量导入之前开启一个新的事务;一旦全部加载完毕后再统一提交整个过程的结果。 ```python try: connection.autocommit = False insert_query_1 = "INSERT INTO test_table(col1,col2) VALUES('val1','val2')" delete_query = "DELETE FROM another_test WHERE condition" cursor.execute(insert_query_1) cursor.execute(delete_query) connection.commit() print("Transaction completed") except Exception as e: connection.rollback() print("An exception occurred:",e) finally: if connection: cursor.close() connection.close() ``` 以上例子演示了在一个事务范围内先后执行两条不同的DML(Datamanipulation Language)语句——先是增加某些项紧接着移除另一些符合条件的内容。假如期间发生错误,则回滚所有未决变动以防破坏原始状态的数据完整性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值