使用python进行PostgreSQL 数据库连接

news/2024/12/12 17:37:46/文章来源:https://www.cnblogs.com/zreo2home/p/18603033

使用python进行PostgreSQL 数据库连接

PostgreSQL 数据库是最常用的关系型数据库之一,最吸引人的一点是它作为开源数据库且具有可拓展性,能够提供丰富的应用。运用python可以很简单的建立PostgreSQL 数据库连接,其中最受欢迎的就是psycopg。

1. 安装psycopg2

Psycopy是针对python的Postgres 数据库的适配模块,安装psycopg2可以整合python和Postgres 。使用cmd输入命令进行安装:

pip install psycopg2

也可以在pycharm中查找psycopg2安装包:

2. 图形化连接数据库

在pycharm中选择Database,点击左上角的+添加数据库,选择postgresql:
创建数据库连接后点击apply,数据库会显示在右侧窗格中。

3. 代码连接数据库

3.1 不使用配置文件

下面使用 psycopy2.connect()方法连接到postgresql数据库。通过调用cursor类中的execute()方法对数据库进行操作。在execute()中用SQL语句创建表。使用commit()将数据发送到数据库服务器,最后使用close()关闭数据库。commit()能够对数据库进行改变,且不可逆。

connect() 方法的参数一般包括:

  • database: 要连接的数据库名称
  • user:连接数据库的用户名
  • password: 连接数据库的密码
  • host: 数据库端口的地址,一般为 “localhost”,或者主机的IP地址
  • port: 门户 默认为5432.
import psycopg2con = psycopg2.connect(database="postgres",user="fbase",password="123456",host="192.168.198.152",port="8432")
print(con)
print("Database opened successfully")
cur = con.cursor()
cur.execute('SELECT version()')
db_version = cur.fetchone()
print(db_version)
con.close()

运行结果如下:

3.2 使用配置文件

可以使用配置文件来存储所有连接参数。

database.ini文件的内容如下:

[postgresql]
host = 192.168.198.152
database = postgres
user = fbase
password = 123456
port = 8432

下面的config()函数会读取database.ini文件并返回连接参数。该config()函数放置在config.py文件中:

from configparser import ConfigParserdef config(filename='../../resource/database.ini', section='postgresql'):# create a parserparser = ConfigParser()# read config fileparser.read(filename)# get section, default to postgresqldb = {}if parser.has_section(section):params = parser.items(section)for param in params:db[param[0]] = param[1]else:raise Exception('Section {0} not found in the {1} file'.format(section, filename))return db

下面的connect()函数连接到suppliers数据库并打印出 PostgreSQL 数据库版本。

import psycopg2from demo.pgdemo.config import configdef connect():""" Connect to the PostgreSQL database server """conn = Nonetry:# read connection parametersparams = config()# connect to the PostgreSQL serverprint('Connecting to the PostgreSQL database...')conn = psycopg2.connect(**params)# create a cursorcur = conn.cursor()# execute a statementprint('PostgreSQL database version:')cur.execute('SELECT version()')# display the PostgreSQL database server versiondb_version = cur.fetchone()print(db_version)# close the communication with the PostgreSQLcur.close()except (Exception, psycopg2.DatabaseError) as error:print(error)finally:if conn is not None:conn.close()print('Database connection closed.')if __name__ == '__main__':connect()

怎么运行的。

  • 首先,从database.ini文件中读取数据库连接参数。
  • 接下来,通过调用connect()函数创建一个新的数据库连接。
  • 然后,新建一个cursor并执行SQL语句来获取 PostgreSQL 数据库版本。
  • 之后,通过调用游标对象的 fetchone()方法读取结果集。
  • 最后,通过调用cursorconnection对象的close()方法关闭与数据库服务器的通信。

4. DML语句测试

4.1 创建表

使用SQL(Structured Query Language)语句CREATE TABLE添加新的表:

import psycopg2# 建立数据库连接
con = psycopg2.connect(database="postgres",user="fbase",password="123456",host="192.168.198.152",port="8432")
print("Database opened successfully")
# 调用游标对象
cur = con.cursor()
# 用cursor中的execute 使用DDL语句创建一个名为 STUDENT 的表,指定表的字段以及字段类型
cur.execute('''CREATE TABLE IF NOT EXISTS STUDENT(ADMISSION INT PRIMARY KEY     NOT NULL,NAME           TEXT            NOT NULL,AGE            INT             NOT NULL,COURSE        CHAR(50),DEPARTMENT        CHAR(50));''')# 提交更改,增添或者修改数据只会必须要提交才能生效
con.commit()
con.close()

结果查看:

postgres=# \dList of relationsSchema |  Name   | Type  | Owner 
--------+---------+-------+-------public | student | table | fbase
(1 row)

4.2 表插入数据

使用INSERT INTO 在以经生成的表中插入数据

import psycopg2# 建立数据库连接
con = psycopg2.connect(database="postgres",user="fbase",password="123456",host="192.168.198.152",port="8432")
print("Database opened successfully")
# 调用游标对象
cur = con.cursor()
# 在表中插入一条数据
cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) ""VALUES (3420, 'John', 18, 'Computer Science', 'ICT')")# 提交更改,增添或者修改数据只会必须要提交才能生效
con.commit()
con.close()

结果查看:

postgres=# select * from student ;admission | name | age |                       course                       |                     department                     
-----------+------+-----+----------------------------------------------------+----------------------------------------------------3420 | John |  18 | Computer Science                                   | ICT                                               
(1 row)

4.3 表更新数据

同样使用SQL语句更新目标字段,使用commit()更新数据库

import psycopg2# 建立数据库连接
con = psycopg2.connect(database="postgres",user="fbase",password="123456",host="192.168.198.152",port="8432")
print("Database opened successfully")
# 调用游标对象
cur = con.cursor()
# 更新表中的数据
cur.execute("UPDATE student set name = 'joe' WHERE admission = 3420")# 提交更改,增添或者修改数据只会必须要提交才能生效
con.commit()
con.close()

结果查看:

postgres=# select * from student ;admission | name | age |                       course                       |                     department                     
-----------+------+-----+----------------------------------------------------+----------------------------------------------------3420 | John |  18 | Computer Science                                   | ICT                                               
(1 row)postgres=# select * from student ;admission | name | age |                       course                       |                     department                     
-----------+------+-----+----------------------------------------------------+----------------------------------------------------3420 | joe  |  18 | Computer Science                                   | ICT                                        
(1 row)

4.4 表删除数据

同样使用SQL语句更新目标字段,使用commit()更新数据库

import psycopg2# 建立数据库连接
con = psycopg2.connect(database="postgres",user="fbase",password="123456",host="192.168.198.152",port="8432")
print("Database opened successfully")
# 调用游标对象
cur = con.cursor()
# 删除表中的数据
cur.execute("DELETE FROM student WHERE admission = 3420")# 提交更改,增添或者修改数据只会必须要提交才能生效
con.commit()
con.close()

结果查看:

postgres=# select * from student ;admission | name | age |                       course                       |                     department                     
-----------+------+-----+----------------------------------------------------+----------------------------------------------------3420 | joe  |  18 | Computer Science                                   | ICT                                               
(1 row)postgres=# select * from student ;admission | name | age | course | department 
-----------+------+-----+--------+------------
(0 rows)

5. DQL语句测试

5.1 查看表中的数据

同样使用SQL语句更新目标字段,使用commit()更新数据库

import psycopg2# 建立数据库连接
con = psycopg2.connect(database="postgres",user="fbase",password="123456",host="192.168.198.152",port="8432")
print("Database opened successfully")
# 调用游标对象
cur = con.cursor()
# 删除表中的数据
cur.execute("SELECT * FROM student")rows = cur.fetchall()
for row in rows:print("ADMISSION =", row[0])print("NAME =", row[1])print("AGE =", row[2])print("COURSE =", row[3])print("DEPARTMENT =", row[4], "\n")# 提交更改,增添或者修改数据只会必须要提交才能生效
con.commit()
con.close()

结果查看:

D:\python3\python.exe D:/project/python/demo/demo/pgdemo/dql_select_1.py
Database opened successfully
ADMISSION = 3420
NAME = John
AGE = 18
COURSE = Computer Science                                  
DEPARTMENT = ICT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/851483.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12月6日恭喜CUUG郑同学通过OCP考试获得OCP证书

2024年10月21日,CUUG高同学收到了Oracle数据库管理员中级认证的OCP证书,恭喜高同学顺利过关OCP! xxx Gao Oracle Database Administration 2019 Certified Professional This certifies that the above named is recognized by Oracle Corporation as Oracle Certified. Octo…

如何解析定位到省市区,电子围栏的开发思路

在实际项目中,有很多时候需要和定位和省市区打交道。 一般来说,定位解析到省市区最快的方式就是直接调用高德的api(手动狗头) 不过高德有限制,规模小还行,大一点就难受了(得加钱!)。 我司就是这个情况,于是自己搞一个反解析的,项目已经开源,朋友们拿去就可以用! 项目…

水库水坝监测与预警系统,安全守护水利工程

水库水坝监测与预警系统,安全守护水利工程水库水坝监测与预警系统解决方案,并同步研发了SLU闸坝监测系统,可完成闸前水位、尾水水位、入出库、发电机负荷、总流量、降雨量等关键信息监测以及闸门反向控制,远程报警等功能。监测系统架构水库水坝监测与预警系统主要包括一体化…

协作文档革命:如何让你的团队效率翻倍?

协作文档如何提升团队日常协作效率?——从需求到解决方案的深度剖析 在当下高效协作成为刚需的工作环境中,文档协作工具已然成为团队日常需求的核心支柱。一个理想的协作文档不仅仅是信息记录的载体,更是团队成员之间共享想法、同步进度、以及推动决策的协作中心。然而,如何…

通过指针引用多维数组

相较于一维数组,二维数组可以理解为数组中的数组,而用指针引用二维则与二级指针有关。 难点是与一维数组有重合部分但赋予了新概念。 设a为二维数组名,从二维数组角度看,代表第零行零列元素a【0】【0】即&a【0】【0】也就是二维数首元素的地址,指向a【0】也称0行起始地…

Slick/Slick.js使用方法(个人总结)/Slick.js介绍(转载,仅个人收藏使用)

转载,仅学习收藏使用!Slick/Slick.js使用方法(个人总结)/Slick.js介绍 相比于Swiper而选择使用Slick.js的原因主要是因为其兼容不错并且在手机端的滑动效果更顺畅官方参数介绍:官方地址参数  类型 默认值 描述accessibility 布尔值 TRUE 启用Tab键和箭头键导航adaptiveHe…

RenderDoc在Texture View中使用自定义的Shader

简单介绍一下如何在RenderDoc中使用Channels设定为Custom后的Shader; 官方文档:How do I use a custom visualisation shader?在Texture View中设置Channels为Custom; 输入新创建的Shader名称及后缀;点击绿色加号创建Custom Shader,创建的hlsl保存会在C:\Users\PC\AppDat…

ASE50N06-ASEMI中低压N沟道MOS管ASE50N06

ASE50N06-ASEMI中低压N沟道MOS管ASE50N06编辑:ll ASE50N06-ASEMI中低压N沟道MOS管ASE50N06 型号:ASE50N06 品牌:ASEMI 封装:TO-252 批号:最新 最大漏源电流:50A 漏源击穿电压:60V RDS(ON)Max:15mΩ 引脚数量:3 芯片个数: 沟道类型:N沟道MOS管、低压MOS管 漏电流:…

【算法基础】图的存储与遍历

一、图的存储 在我们存储图的时候,主要使用邻接矩阵、邻接表两种方式来存储。通常邻接矩阵存储稠密图(边多),临界矩阵存储稀疏图(边少)。1.1 邻接矩阵存储 邻接矩阵听起来比较高大上,其实就是用二维数组来表示 \(a\) 点与 \(b\) 点之间有一条边。例如在上述无向图中 \(1…

解决Pandas的to_excel()写入不同Sheet,而不会被重写

一、问题描述 在使用Pandas的to_excel()方法写入数据时,当我们想将多个数据写入一个Excel表的不同DataFrame中,虽然能够指定sheet_name参数,但是会重写整个Excel之后才会存储。 现在有3个sheet,内容如下:>>> import pandas as pd >>> df1 = pd.read_exc…

基于Transformer的生成式人工智能模型的训练和推理以及成员推断攻击的实现

Transformer_AI 2024年11月15日更新 在此教程中,我们将对基于Transformer的生成式人工智能模型及其原理进行一个简单的介绍,并实现其训练和推理过程,且至少支持3种数据集,目前支持数据集有:MNIST、fashionMNIST、CIFAR10等,并给用户提供一个详细的帮助文档。 目录 基本介…