操作数据库最快的方式当然是直接用使用SQL语言直接对数据库进行操作,但是偶尔我们也会碰到在代码中操作数据库的情况,我们可能用ORM类的库对数控库进行操作,但是当需要操作大量的数据时,ORM的数据显的太慢了。在python中,遇到这样的情况,我推荐使用psycopg2
操作postgresql
数据库
官方文档传送门: 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')
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()