Python操作PostgreSql数据库(批量的增删改查)
上一节讲到了python操作pg的基本用法,但这并不能满足我们操作大量数据的美好心愿,这一节主要讲如果使用pyhton进行批量的增删改查操作
psycopg2
官方文档传送门: http://initd.org/psycopg/docs/index.html
批量操作
增
批量操作数据库有多种方法,根据官网的叙述
1.数据有2种格式
- 格式1:二维数组
data1 = [['member%d' % x, 'password%d' % x, 'signal%d' % x] for x in range(206, 500)]
# 像这样
[(10, datetime.date(2005, 11, 18), "O'Reilly"),]
- 格式二:字典
({'name': 'member%d' % x, 'password': 'password%d' % x, 'singal': 'signal%d' % x} for x in range(201, 300))
[ {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)},]
这里插一句,虽然官网讲可以有2种格式,但是但我尝试使用字典时,却无法执行成功,在线愚钝,还没有找到原因,贴上官网参考,大家自去查询:http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries
2.数据批量操作有三种方法
1.executemany:最简单的一种方法,属于游标的实例方法
2.execute_batch:性能好,速度快的方法,属于类方法
3.execute_values:官方推荐的方法,但是条件是要批量操作的字段的值必须相同(局限性较大)
示例
def insertManyOperate():
conn = psycopg2.connect(**PG_SQL_LOCAL)
cursor = conn.cursor()
data1 = [['member%d' % x, 'password%d' % x, 'signal%d' % x] for x in range(206, 500)]
sql1 = "insert into public.member(name,password,singal)values(%s,%s,%s)"
# cursor.executemany(sql1, data1)
execute_batch(cursor, sql1, data1, page_size=len(data1))
# data2 = ({'name': 'member%d' % x, 'password': 'password%d' % x, 'singal': 'signal%d' % x} for x in range(201, 300))
# sql2 = "insert into public.member(name,password,singal)values(%(name)s,%(password)s,(singal)%s)"
# cursor.executemany(sql2, data2)
conn.commit()
conn.close()
print('insert many records into public.memmber successfully')
查
def selectBulkOperate():
conn = psycopg2.connect(**PG_SQL_LOCAL)
cursor = conn.cursor()
cursor.execute("select id,name,password,singal from public.member where id>0")
count = 0
while True:
rows = cursor.fetchmany(30)
count += 1
print('这次第%d' % (count) + '循环')
for row in rows:
print('id=', row[0], ',name=', row[1], ',pwd=', row[2], ',singal=', row[3], )
if not rows:
break
conn.close()
删除和更新这里就不做列举了。。。都是sql语句,使用批量执行的方式