PostgreSQL in Python
依赖包
psycopg2包
原理
执行sql的完整步骤:
- 建立连接,获取连接对象
- 获取连接对象的游标,非线程安全,多个应用会在同一个连接中建立多个游标(cursor)、
- 编写sql语句,并调用execute方法进行调用。
- 抓取数据,如fetchone(0和fetchall()。
- 提交事务。connection.commit()
- 关闭连接,包括游标(cursor)和数据库(connection)连接。
初始化数据库
import psycopg2
# 获取连接字符串:cfg.DATABASE.CONNECTIONSTRING-- "dbname=*** user=*** password=**** host=***.***.***.*** port=***"
'''
连接字符串可以是字符串的形式或者是keyword的形式
'''
connection = psycopg2.connect(cfg.DATABASE.CONNECTIONSTRING)
cursor = connection.cursor()
查询记录
-
查询一条记录
使用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()
-
查询多条数据
使用fetchmany()方法可以抓取多条数据。此方法可以多次使用,直到数据库中没有数据,此时会返回空的列表。如果不传参数,会限制查询条数,一般返回第一条。
# -*- 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()
-
查询全部数据
使用cursor.fetchall()即可获取所有的数据。
-
按条件记录查询
记得使用绑定变量的方式,另外参数末尾必须带上逗号。
try: connection = psycopg2.connect(cfg.DATABASE.CONNECTIONSTRING) cursor = connection.cursor() sql = ''' select * from test where imageid=%s ''' params = (imageid,) # 执行语句 cursor.execute(sql,params) result = cursor.fetchall() connection.commit() return result except Exception as e: raise e finally: cursor.close() connection.close()
插入记录
-
参数分离方式
# -*- 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)""" # 注意insert语句中最后参数后面无需加逗号(,) params = (101, 'zszxz') # 执行语句 cursor.execute(sql,params) # 事物提交 conn.commit() # 关闭数据库连接 conn.close()
-
字典映射关系方式
# -*- 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 (%(num)s, %(name)s)""" params = {'num':102, 'name':'zszxz'} # 执行语句 cursor.execute(sql,params) # 事物提交 conn.commit() # 关闭数据库连接 conn.close()
更新记录
更新记录与插入记录的做法差不多,这里就不做详细的描述了。
删除记录
删除记录比较简单,也不做详细描述了。
其他命令
- 打印sql:cursor.query
- 获取总条数:cursor.rowcount
- 显示行号:cursor.rownumber
- 显示sql和绑定参数:cursor.mogrift(sql, params)
关闭退出
一般放在finally子句当中。
# 事物提交
conn.commit()
# 关闭数据库连接
conn.close()