Python操作PostgreSql数据库(基本的增删改查)(一)

Python操作PostgreSql数据库(基本的增删改查)

操作数据库最快的方式当然是直接用使用SQL语言直接对数据库进行操作,但是偶尔我们也会碰到在代码中操作数据库的情况,我们可能用ORM类的库对数控库进行操作,但是当需要操作大量的数据时,ORM的数据显的太慢了。在python中,遇到这样的情况,我推荐使用psycopg2操作postgresql数据库

psycopg2

官方文档传送门: http://initd.org/psycopg/docs/index.html

简单的增删改查

连接

连接pg并创建表

PG_SQL_LOCAL = {
    'database': 'postgres',
    'user': 'postgres',
    'password': "8dsa581",
    # 'host':'10.27.78.1',
    'host': 'localhost'
}


def connectPostgreSQL():
    conn = psycopg2.connect(**PG_SQL_LOCAL)
    print('connect successful!')
    cursor = conn.cursor()
    cursor.execute('''
    create table public.members(
        id integer not null primary key,
        name varchar(32) not null,
        password varchar(32) not null,
        singal varchar(128)
    )''')
    conn.commit()
    conn.close()
    print('table public.member is created!')

一条一条的增加数据

def insertOperate():
    conn = psycopg2.connect(**PG_SQL_LOCAL)
    cursor = conn.cursor()
    cursor.execute("insert into public.member(id,name,password,singal)\
values(1,'member0','password0','signal0')")
    cursor.execute("insert into public.member(id,name,password,singal)\
values(2,'member1','password1','signal1')")
    cursor.execute("insert into public.member(id,name,password,singal)\
values(3,'member2','password2','signal2')")
    cursor.execute("insert into public.member(id,name,password,singal)\
values(4,'member3','password3','signal3')")
    row = conn.fetchone()
    print(row)
    conn.commit()
    conn.close()

    print('insert records into public.memmber successfully')

  • fetchall() 一次性获取所有数据
  • fetchmany() 一次值提取2000条数据(使用服务端的游标)
def selectOperate():
    conn = psycopg2.connect(**PG_SQL_LOCAL)
    cursor = conn.cursor()
    cursor.execute("select id,name,password,singal from public.member where id>2")
    # rows = cursor.fetchall()
    # for row in rows:
    #     print('id=', row[0], ',name=', row[1], ',pwd=', row[2], ',singal=', row[3],)

    while True:
        rows = cursor.fetchmany(2000)
        if not rows:
            break
        for row in rows:
            # print('id=', row['id'], ',name=', row['name'], ',pwd=', row['pwd'], ',singal=', row['singal'],)
            rid,name,pwd,singal = row
            print(rid,name,pwd,singal)
            # print('id=', row[0], ',name=', row[1], ',pwd=', row[2], ',singal=', row[3], )
    conn.close()

更新数据

def updateOperate():
    conn = psycopg2.connect(**PG_SQL_LOCAL)
    cursor=conn.cursor()
    result = cursor.execute("update public.member set name='member X' where id=3")
    print(result)
    conn.commit()
    print("Total number of rows updated :", cursor.rowcount)

    cursor.execute("select id,name,password,singal from public.member")
    rows=cursor.fetchall()
    for row in rows:
        print('id=',row[0], ',name=',row[1],',pwd=',row[2],',singal=',row[3],'\n')
    conn.close()

删除数据

def deleteOperate():
    conn = psycopg2.connect(**PG_SQL_LOCAL)
    cursor = conn.cursor()

    cursor.execute("select id,name,password,singal from public.member")
    rows = cursor.fetchall()
    for row in rows:
        print('id=', row[0], ',name=', row[1], ',pwd=', row[2], ',singal=', row[3], '\n')

    print('begin delete')
    cursor.execute("delete from public.member where id=2")
    conn.commit()
    print('end delete')
    print("Total number of rows deleted :", cursor.rowcount)

    cursor.execute("select id,name,password,singal from public.member")
    rows = cursor.fetchall()
    for row in rows:
        print('id=', row[0], ',name=', row[1], ',pwd=', row[2], ',singal=', row[3], '\n')
    conn.close()

补充,增加的字段带有时间格式

带有时间格式是,只需要传入时间格式的字符串(‘2017-05-27’)即可,PG会自动识别

cur.execute("INSERT INTO Employee "
            "VALUES('Gopher', 'China Beijing', 100, '2017-05-27')")
# 查询数据
cur.execute("SELECT * FROM Employee")
rows = cur.fetchall()
for row in rows:
    print('name=' + str(row[0]) + ' address=' + str(row[1]) +
          ' age=' + str(row[2]) + ' date=' + str(row[3]), type(row[3]))

    # 插入数据
    sql = """INSERT INTO Employees VALUES(%s, %s, %s,%s) """
    var = []
    var.append([row[0], row[1], row[2], row[3]])
    cur.executemany(sql, var)

# 提交事务
conn.commit()

# 关闭连接
conn.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值