pandas操作mysql数据库

代码

#%% pandas操作sql数据库
from sqlalchemy import create_engine,exc   #用来捕捉sqlalchemy的异常
import pandas as pd

#建立连接
conn = create_engine("mysql+pymysql://root:root@localhost/niuke",
                     max_overflow=10, pool_size=2, pool_recycle=21600)
#读取本地数据,形成dataframe
ceshi_df = pd.read_excel('./自己测试/pandas操作数据库.xlsx')

#1、增  to_sql
ceshi_df.to_sql('zuhe',conn,index=False,if_exists='append')
'''
参数说明:
zuhe :要导入的数据的表名
conn:数据库的连接
if_exists 
参数,如果表存在
	fail: Raise a ValueError.    报错
	replace: Drop the table before inserting new values.  #删除然后再新增
	append: Insert new values to the existing table.    #追加到已存在的表
#%% pandas操作sql数据库
from sqlalchemy import create_engine,exc   #用来捕捉sqlalchemy的异常
import pandas as pd

#建立连接
conn = create_engine("mysql+pymysql://root:root@localhost/niuke",
                     max_overflow=10, pool_size=2, pool_recycle=21600)


#1、增  to_sql
ceshi_df.to_sql('zuhe',conn,index=False,if_exists='append')
'''
参数说明:
zuhe :要导入的数据的表名
conn:数据库的连接
if_exists 
参数,如果表存在
	fail: Raise a ValueError.    报错
	replace: Drop the table before inserting new values.  #删除然后再新增
	append: Insert new values to the existing table.    #追加到已存在的表
	ceshi_df.to_sql('zuhe',conn,index=False,if_exists='append')
'''
#2、删除1
#构建单条删除语句,并传递参数
del_sql = '''delete from zuhe where ciyu_x = %(ciyu)s and DEH_MID = %(deh)s'''
deh = 'J000162'
ciyu = 2
#成功执行删除操作后,无论数据是否确实删除都会出现,ResourceClosedError错误。属于第三方包的异常
#查阅资料后,可以导入相应的包,可以进行捕捉
try :
    pd.read_sql(del_sql,conn,params={'ciyu':ciyu ,'deh' :deh})
except exc.ResourceClosedError:
    print('ResourceClosedError产生异常,删除操作可能已经成功。')
'''
参考下面的网址
https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries
>> cur.execute("""
...     INSERT INTO some_table (an_int, a_date, another_date, a_string)
...     VALUES (%(int)s, %(date)s, %(date)s, %(str)s);
...     """,
...     {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})
'''
#2、删除2
# #批量删除,根据DEH_MID号  不成功
# ceshi_drop=ceshi_df.head(5)  #截取一部分数据进行删除
# del_list_sql='delete from zuhe where  DEH_MID = ANY(%(deh_list)s)'
# deh_list=ceshi_drop['DEH_MID'].tolist()

# #deh_list=str(ceshi_drop['DEH_MID'].tolist()).replace('[','(').replace(']',')')

# try :
#     pd.read_sql(del_list_sql,conn,params={'deh_list':deh_list})
# except exc.ResourceClosedError:
#     print('ResourceClosedError产生异常,删除操作可能已经成功。')
#3、改  略

#4、查
#直接读取表
ceshi_df = pd.read_sql_table('zuhe',conn)
#利用查询读取数据。
ceshi_df = pd.read_sql('select * from zuhe',conn)
#类似
ceshi_df = pd.read_sql_query('select * from zuhe',conn)

思考

pandas与数据库的结合,主要是因为pandas能够快速读取和写入数据到数据库中,而删除和修改的操作与pandas不太适合,应该选择生成一个pymysql光标对象connection.cursor(),然后由光标对象执行sql语句更方便一些。
pymsql操作数据库教程
或者用SQLAlchemy模块进行操作
SQLAlchemy教程

他山之石

pandas read_sql与read_sql_table、read_sql_query 的区别
Psycopg 2.8.7.dev0文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值