Python操作PostgreSql数据库(批量的增删改查)(二)

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语句,使用批量执行的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值