pandas操作mysql

import os.path,pymysql,os,shutil
from sqlalchemy import create_engine
import pandas as pd

同一用户同一地址使用该类
class Pandas_DB:
# 同一用户同一地址使用该类
def __init__(self,db):
self.db = db
self.Con = create_engine('mysql+pymysql://root:root@localhost:3306/%s'%self.db, echo=False)
def Write_Mysql(self, df, tablename, mode='append', types=None):
df.to_sql(tablename, con=self.Con, method='multi', index=None, index_label=None,if_exists=mode, dtype=types, chunksize=30000)
def Read_Mysql(self,tablename,columns=None):
'''读表去重'''
df = pd.read_sql_table(tablename, con=self.Con,columns=columns)
return df.drop_duplicates()
def Read_sql_Mysql(self,sql,columns=None):
'''读表去重'''
df = pd.read_sql(sql, con=self.Con,columns=columns,index_col=None, parse_dates=None)
return df.drop_duplicates()
def Read_To_List(self,tablename,columns=None):
df = pd.read_sql_table(tablename, con=self.Con,columns=columns)
return df.drop_duplicates().values.tulist()
由于是复合使用,而使用pymsql连接是字符串,本人用过多种调试,只有这种能联通,里边有不少坑

#不同用户不同地址
class Pandas_DBS:
def __init__(self, db, ip='localhost', port=3306, Users='root', PassWd='root'):
self.db = db
self.ip = ip
self.port = port
self.Users = Users
self.PassWd = PassWd
self.Con = create_engine('mysql+pymysql://{}:{}@{}:{}/{}'.format(self.Users, self.PassWd, self.ip, self.port, self.db),echo=False)
def Write_Mysql(self, df, tablename, mode='append', types=None):
df.to_sql(tablename, con=self.Con, method='multi', if_exists=mode, index=None, dtype=types, chunksize=10000)
def Read_Mysql(self,tablename,columns=None):
'''读表去重,小表适用'''
df = pd.read_sql_table(tablename, con=self.Con,columns=columns)
return df.drop_duplicates()
def Read_sql_Mysql(self,sql,columns=None):
'''读表去重,打标用sql过滤'''
df = pd.read_sql(sql, con=self.Con,columns=columns)
return df.drop_duplicates()

这种方法是批量操作模式,比传统的效率上高很多,不过里边也有些坑,比如说sql模糊匹配,不是用%,而是用%%
posted @ 2021-03-29 11:19  星辰大海-sdifens  阅读(276)  评论(0编辑  收藏  举报