在公司中需要使用到数据库postgreSQL.这个数据库管理和使用方便,也是现在的主流数据库之一,关键是免费。
这时候就需要使用到将数据使用python导入到postgreSQL.然后再更新
1.导入数据库
代码如下:主要还是参考了网络上的代码片段,然后自己修改成所需要的内容。
import psycopg2
import pandas as pd
from io import StringIO
# 创建一个示例list
data = [[1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7]]
# 将list转换为DataFrame类型
data1 = pd.DataFrame(data)
# 创建一个内存对象f,StringIO为存储在内存中的文件,格式为满足文件的任意格式
f = StringIO()
# DataFrame 类型数据转换为IO缓冲区中的str类型
data1.to_csv(f, sep='\t', index=False, header=False)# 把f的游标移到第一位,write方法后,游标会变成最尾,使用StringIO(**)则不会
f.seek(0)# 连接数据库
conn = psycopg2.connect(host='127.0.0.1', user="postgres", password="123456", database="postgres")
# 创建游标
cur = conn.cursor()
# 将内存对象f中的数据写入数据库,参数columns为所有列的元组
cur.copy_from(f, 'tb_user', columns=('id', 'userame', 'passwd', 'roleid', 'lasttime', 'failnum', 'info'))
# 提交
conn.commit()
cur.close()
conn.close()
print('成功写入数据库')
源码如上,在自己使用的过程中,将起改编成独立的函数就好了。
2.数据更新
后续很多的数据需要更新,也希望简化代码的工作量,于是借用了网络上的代码,将其搞成类,然后进行批量的调用,参考的代码如下,需要的小朋友可以自己改改代码。
# -*- coding: utf-8 -*-
"""
Created on Sat Jan 30 10:38:06 2021
@author: LSNCSZH
"""
import psycopg2
class PostGreSQL:
# 初始化
def __init__(self, dataBaseName, userName, password, host, port):
self.dataBaseName = dataBaseName
self.userName = userName
self.password = password
self.host = host
self.port = port
self._conn = self.GetConnect()
if self._conn:
self._cur = self._conn.cursor()
# 获取数据库连接对象
def GetConnect(self):
conn = False
try:
conn = psycopg2.connect(
database=self.dataBaseName,
user=self.userName,
password=self.password,
host=self.host,
port=self.port
)
except Exception as err:
print("连接数据库失败,%s" % err)
return conn
# 执行查询sql
def ExecQuery(self, sql):
res = ""
try:
self._cur.execute(sql)
res = self._cur.fetchall()
except Exception as err:
print("查询失败, %s" % err)
else:
return res
# 执行增删改sql
def ExceNonQuery(self, sql):
flag = False
try:
self._cur.execute(sql)
self._conn.commit()
flag = True
except Exception as err:
flag = False
self._conn.rollback()
print("执行失败, %s" % err)
else:
return flag
def GetConnectInfo(self):
print("连接信息:")
print("服务器:%s , 用户名:%s , 数据库:%s " % (self.host, self.userName, self.dataBaseName))
3.后期维护
目前,测试来看更新是快,还没什么问题。
一切很OK
,结果如下。
后续看看,有没有其他更加简单的方法来搞。