Python 操作 PostgreSQL 数据库示例【连接、增删改查等】


Posted in Python onApril 21, 2020

本文实例讲述了Python 操作 PostgreSQL 数据库。分享给大家供大家参考,具体如下:

我使用的是 Python 3.7.0

PostgreSQL可以使用psycopg2模块与Python集成。

sycopg2是用于Python编程语言的PostgreSQL数据库适配器。

psycopg2是非常小,快速,稳定的。 您不需要单独安装此模块,因为默认情况下它会随着Python 2.5.x版本一起发布。

pip3 install python-psycopg2
pip3 install psycopg2-binary

连接到数据库

以下Python代码显示了如何连接到现有的数据库。 如果数据库不存在,那么它将自动创建,最后将返回一个数据库对象。

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")

print("Opened database successfully")

在这里指定使用testdb作为数据库名称,如果数据库已成功打开连接,则会提供以下消息:

Open database successfully

创建表

以下Python程序将用于在先前创建的数据库(testdb)中创建一个表:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print("Opened database successfully")

cur = conn.cursor()
cur.execute('''CREATE TABLE COMPANY
    (ID INT PRIMARY KEY   NOT NULL,
    NAME      TEXT  NOT NULL,
    AGE      INT   NOT NULL,
    ADDRESS    CHAR(50),
    SALARY     REAL);''')
print "Table created successfully"

conn.commit()
conn.close()

当执行上述程序时,它将在数据库testdb中创建COMPANY表,并显示以下消息:

Opened database successfully
Table created successfully

插入操作

以下Python程序显示了如何在上述示例中创建的COMPANY表中创建记录:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print("Opened database successfully")

cur = conn.cursor()

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
   VALUES (1, 'Paul', 32, 'California', 20000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
   VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
   VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
   VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

conn.commit()
print("Records created successfully");
conn.close()

当执行上述程序时,它将在COMPANY表中创建/插入给定的记录,并显示以下两行:

Opened database successfully
Records created successfully

SELECT操作

以下 Python 程序显示了如何从上述示例中创建的 COMPANY 表中获取和显示记录:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print("Opened database successfully")

cur = conn.cursor()

cur.execute("SELECT id, name, address, salary from COMPANY")
rows = cur.fetchall()
for row in rows:
  print("ID = ", row[0])
  print("NAME = ", row[1])
  print("ADDRESS = ", row[2])
  print("SALARY = ", row[3], "\n")

print("Operation done successfully");
conn.close()

执行上述程序时,会产生以下结果:

Opened database successfully
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

更新操作

以下 Python 代码显示了如何使用UPDATE语句来更新任何记录,然后从COMPANY表中获取并显示更新的记录:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print("Opened database successfully")

cur = conn.cursor()

cur.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit
print("Total number of rows updated :", cur.rowcount)

cur.execute("SELECT id, name, address, salary from COMPANY")
rows = cur.fetchall()
for row in rows:
  print("ID = ", row[0])
  print("NAME = ", row[1])
  print("ADDRESS = ", row[2])
  print("SALARY = ", row[3], "\n")

print("Operation done successfully");
conn.close()

Python

执行上述程序时,会产生以下结果:

Opened database successfully
Total number of rows updated : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  25000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

删除操作

以下 Python 代码显示了如何使用 DELETE 语句来删除记录,然后从 COMPANY 表中获取并显示剩余的记录:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print("Opened database successfully")

cur = conn.cursor()

cur.execute("DELETE from COMPANY where ID=2;")
conn.commit
print("Total number of rows deleted :", cur.rowcount)

cur.execute("SELECT id, name, address, salary from COMPANY")
rows = cur.fetchall()
for row in rows:
  print("ID = ", row[0])
  print("NAME = ", row[1])
  print("ADDRESS = ", row[2])
  print("SALARY = ", row[3], "\n")

print("Operation done successfully");
conn.close()

执行上述程序时,会产生以下结果:

Opened database successfully
Total number of rows deleted : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python写的Socks5协议代理服务器
Aug 06 Python
利用python求相邻数的方法示例
Aug 18 Python
django中send_mail功能实现详解
Feb 06 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Django中自定义模型管理器(Manager)及方法
Sep 23 Python
django序列化serializers过程解析
Dec 14 Python
python中sklearn的pipeline模块实例详解
May 21 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
python文件排序的方法总结
Sep 13 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
Django中celery的使用项目实例
Jul 07 Python
Django实现celery定时任务过程解析
Apr 21 #Python
使用PyQt5实现图片查看器的示例代码
Apr 21 #Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 #Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 #Python
Django基于客户端下载文件实现方法
Apr 21 #Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 #Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 #Python
You might like
pw的一个放后门的方法分析
2007/10/08 PHP
php 在线打包_支持子目录
2008/06/28 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
利用javascript数组长度循环数组内所有元素
2013/12/27 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
前台文员我鉴定
2014/01/12 职场文书
房屋委托书范本
2014/04/04 职场文书
保护环境建议书400字
2014/05/13 职场文书
重阳节简报
2015/07/20 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS