1、安装 psycopg2
pip install psycopg2 -i https://pypi.tuna.tsinghua.edu.cn/simple
2、连接数据库
每条完整的sql执行步骤如下:
建立连接获得 connect 对象
获得游标对象,游标对象可以对数据库进行执行操作
写sql语句
调用execute()方法执行sql
抓取数据
提交事物
关闭连接
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象cursor = conn.cursor()# sql语句sql = "SELECT VERSION()"# 执行语句cursor.execute(sql)# 获取单条数据.data = cursor.fetchone()# 打印print("database version : %s " % data)# 事物提交conn.commit()# 关闭数据库连接conn.close()
输出结果打印出数据库版本说明连接数据库成功:
database version : PostgreSQL 11.3, compiled by Visual C++ build 1914, 64-bit
3、创建表
创建学生表主要有字段id作为唯一标识,字段 num 代表学号,字段 name 代表学生姓名;
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql = """CREATE TABLE student (id serial4 PRIMARY KEY,num int4,name varchar(25));"""# 执行语句cursor.execute(sql)print("student table created successfully")# 事物提交conn.commit()# 关闭数据库连接conn.close()
4、插入操作
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="INSERT INTO student (num, name) \VALUES (%s, '%s')" % \(100, 'zszxz')# 执行语句cursor.execute(sql)print("successfully")# 事物提交conn.commit()# 关闭数据库连接conn.close()
5、查询操作
使用fetchone()方法可以抓取一条数据
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""SELECT * FROM student;"""# 执行语句cursor.execute(sql)# 抓取row = cursor.fetchone()print(row)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
输出结果:
(1, 100, 'zszxz')
使用fetchmany([size=cursor.arraysize])方法可以抓取多条数据;
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""SELECT * FROM student;"""# 执行语句cursor.execute(sql)# 抓取#row = cursor.fetchone()rows = cursor.fetchmany(2)print(rows)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
输出结果:
[(1, 100, 'zszxz'), (2, 101, 'zszxz')]
使用 fetchall() 方法会抓取所有数据;
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""SELECT * FROM student;"""# 执行语句cursor.execute(sql)# 抓取rows = cursor.fetchall()print(rows)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
输出结果:
[(1, 100, 'zszxz'), (2, 101, 'zszxz'), (3, 102, 'zszxz')]
条件查询,带参查询读者应该谨记sql与参数分离,参数的末尾必须加上逗号
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""SELECT * FROM student where id = %s;"""params = (1,)# 执行语句cursor.execute(sql,params)# 抓取rows = cursor.fetchall()print(rows)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
输出结果:
[(1, 100, 'zszxz')]
6、 更新操作
更新操作跟之前的查询,插入类似,参数对应的文章分清楚即可。
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""update student set name = %s where id = %s """params = ('知识追寻者',3,)# 执行语句cursor.execute(sql,params)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
7、删除操作
删除操作很简单,看如下代码,与之前的代码流程没什么区别;
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""delete from student where id = %s """params = (3,)# 执行语句cursor.execute(sql,params)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
8、异常处理
使用psycopg2的 Error 进行异常捕获,能捕获到sql执行时期的所有异常;下面代码中表test是库中不存的表,执行sql后会报异常,经过异常捕获后非常美观,不影响程序运行;
# -*- coding: utf-8 -*-import psycopg2# 获得连接conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")# 获得游标对象,一个游标对象可以对数据库进行执行操作cursor = conn.cursor()# sql语句 建表sql ="""select * from test"""params = (3,)try:# 执行语句cursor.execute(sql,params)except psycopg2.Error as e:print(e)# 事物提交conn.commit()# 关闭数据库连接cursor.close()conn.close()
执行结果
错误: 关系 "test" 不存在LINE 1: select * from test
文章转载自算法工程师的学习日志,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




