使用python进行PostgreSQL 数据库连接
使用python进行PostgreSQL 数据库连接PostgreSQL 数据库是最常用的关系型数据库之一最吸引人的一点是它作为开源数据库且具有可拓展性能够提供丰富的应用。运用python可以很简单的建立PostgreSQL 数据库连接其中最受欢迎的就是psycopg。1. 安装psycopg2Psycopy是针对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 ConfigParser def config(filename../../resource/database.ini, sectionpostgresql): # create a parser parser ConfigParser() # read config file parser.read(filename) # get section, default to postgresql db {} 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 psycopg2 from demo.pgdemo.config import config def connect(): Connect to the PostgreSQL database server conn None try: # read connection parameters params config() # connect to the PostgreSQL server print(Connecting to the PostgreSQL database...) conn psycopg2.connect(**params) # create a cursor cur conn.cursor() # execute a statement print(PostgreSQL database version:) cur.execute(SELECT version()) # display the PostgreSQL database server version db_version cur.fetchone() print(db_version) # close the communication with the PostgreSQL cur.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()方法读取结果集。最后通过调用cursor和connection对象的close()方法关闭与数据库服务器的通信。4. DML语句测试4.1 创建表使用SQL(Structured Query Language)语句CREATE TABLE添加新的表:import psycopg2 # 建立数据库连接 con psycopg2.connect(databasepostgres, userfbase, password123456, host192.168.198.152, port8432) 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# d List of relations Schema | Name | Type | Owner ------------------------------- public | student | table | fbase (1 row)4.2 表插入数据使用INSERT INTO在以经生成的表中插入数据import psycopg2 # 建立数据库连接 con psycopg2.connect(databasepostgres, userfbase, password123456, host192.168.198.152, port8432) 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(databasepostgres, userfbase, password123456, host192.168.198.152, port8432) 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(databasepostgres, userfbase, password123456, host192.168.198.152, port8432) 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(databasepostgres, userfbase, password123456, host192.168.198.152, port8432) 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], ) # 提交更改增添或者修改数据只会必须要提交才能生效 con.commit() con.close()结果查看D:python3python.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 w[3]) print(DEPARTMENT , row[4], ) # 提交更改增添或者修改数据只会必须要提交才能生效 con.commit() con.close()结果查看D:python3python.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

相关新闻

Unity渲染优化实战:如何用CommandBuffer避免Camera深度纹理的DC翻倍问题

Unity渲染优化实战:如何用CommandBuffer避免Camera深度纹理的DC翻倍问题

Unity渲染优化实战:如何用CommandBuffer避免Camera深度纹理的DC翻倍问题 如果你是一位Unity开发者,并且你的项目已经开始面临性能瓶颈,尤其是在移动设备或者需要处理大量物体的场景中,那么“Draw Call翻倍”这个词很可能已经让你头…

2026/7/2 19:35:01 阅读更多 →
StardewMods:颠覆性农场管理工具集 解锁6个效率维度

StardewMods:颠覆性农场管理工具集 解锁6个效率维度

StardewMods:颠覆性农场管理工具集 解锁6个效率维度 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods 星露谷物语作为一款经典农场经营游戏,玩家常面临重复劳动、信…

2026/5/17 11:12:40 阅读更多 →
专科生也能用!千笔ai写作,遥遥领先的AI论文写作软件

专科生也能用!千笔ai写作,遥遥领先的AI论文写作软件

你是否曾为论文的选题发愁?是否在深夜面对空白文档无从下笔?是否反复修改却仍对结果不满意?论文写作不仅是知识的较量,更是时间与精力的拉锯战。对于专科生来说,写作难度更是一步一坎。但今天,我们为你带来…

2026/5/17 11:12:38 阅读更多 →

最新新闻

晋城酿造食品厂净化板如何选才能解决墙面难题

晋城酿造食品厂净化板如何选才能解决墙面难题

晋城本地特色食品以粮食醋发酵、杂粮深加工、小型卤味加工为主,大量酿造车间会长期挥发酸性气体,食品净化车间、无尘厂房改造经常遇到墙面腐蚀掉皮的困扰,和普通车间工况有明显区别,照搬通用板材很容易短期报废。 本地多家醋业厂房…

2026/7/3 14:45:10 阅读更多 →
HASL喷锡适配焊盘、孔径、板材、布局标准化设计规范

HASL喷锡适配焊盘、孔径、板材、布局标准化设计规范

HASL 批量生产出现堵孔、锡桥、露铜、焊盘共面度差、板材起泡翘曲等缺陷,七成根源并非制程管控问题,而是前期 PCB 布局、焊盘、孔径、板材选型未匹配喷锡工艺特性,设计先天存在 DFM 缺陷。本文从板材选型、焊盘结构、通孔孔径、大面积铜设计、…

2026/7/3 14:43:09 阅读更多 →
Kiran-Screensaver源代码架构分析:理解Qt屏保实现原理

Kiran-Screensaver源代码架构分析:理解Qt屏保实现原理

Kiran-Screensaver源代码架构分析:理解Qt屏保实现原理 【免费下载链接】kiran-screensaver This program provides screensaver backend. 项目地址: https://gitcode.com/openeuler/kiran-screensaver 前往项目官网免费下载:https://ar.openeuler…

2026/7/3 14:41:08 阅读更多 →
lboot单元测试实践:使用lboot-test-runner验证功能正确性

lboot单元测试实践:使用lboot-test-runner验证功能正确性

lboot单元测试实践:使用lboot-test-runner验证功能正确性 【免费下载链接】lboot a lightweight bootloader implemented by the Rust language 项目地址: https://gitcode.com/openeuler/lboot 前往项目官网免费下载:https://ar.openeuler.org/a…

2026/7/3 14:41:08 阅读更多 →
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解

嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解

目录一、移位相关问题1.1 类型提升规则1.2 移位运算注意事项1.3 N位编码满量程值二、简称和符号含义2.1 通信协议相关**FDCAN****HSE****PLL****PCLK**2.2 CANopen 相关术语**PDO****SDO****PDO vs SDO 对比表****cob_id****CoE****BRS**2.3 数学符号三、交流与反馈欢迎大家有问…

2026/7/3 14:39:04 阅读更多 →
13DOF传感器与TM4C1299KCZAD的高精度定位系统设计

13DOF传感器与TM4C1299KCZAD的高精度定位系统设计

1. 项目背景与核心需求 在工业自动化、机器人导航和智能穿戴设备领域,精确的定位与运动追踪一直是技术难点。传统方案往往采用独立的惯性测量单元(IMU)与主控芯片分离的设计,导致系统延迟高、数据同步困难。这个项目创新性地将13自由度(13DOF)传感器与TM…

2026/7/3 14:39:04 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻