• 技术文章 >后端开发 >Python教程

    Python用Pandas读CSV文件写到MySQL的方法

    高洛峰高洛峰2019-02-23 16:27:47原创4055
    汇总一下,自己最近在使用Python读写CSV存数据库中遇到的各种问题。

    相关mysql视频教程推荐:《mysql教程

    上代码:

    reload(sys)
    sys.setdefaultencoding('utf-8')
    host = '127.0.0.1'
    port = 3306
    db = 'world'
    user = 'root'
    password = '123456'
    
    con = MySQLdb.connect(host=host,charset="utf8",port=port,db=db,user=user,passwd=password)
    try:
        df = pd.read_sql(sql=r'select * from city', con=con)
        df.to_sql('test',con=con,flavor='mysql')
    except Exception as e:
        print(e.message)

    不出意外的话会打印出一句:database flavor MySQL is not supported
    在stackoverflow上找到了答案:The flavor ‘mysql’ is deprecated in pandas version 0.19.

    我们换一种方式:

    reload(sys)
    sys.setdefaultencoding('utf-8')
    host = '127.0.0.1'
    port = 3306
    db = 'world'
    user = 'root'
    password = '123456'
    
    engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))
    
    try:
        df = pd.read_sql(sql=r'select * from city', con=engine)
        df.to_sql('test',con=engine,if_exists='append',index=False)
    except Exception as e:
        print(e.message)

    运行下,ok,可以存入了index参数表示是否把DataFrame的index当成一列来存储,一般来说是不需要的,所以赋值为False

    现在看似问题都解决了,但是还有一个小问题。
    假如我有一个含有中文的csv文件(本人Window):
    name age class
    小明 15 一年级
    小张 18 三年级

    engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))
    
    try:
        df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv')
        print(df)
        df.to_sql('test', con=engine, if_exists='append', index=False)
    except Exception as e:
        print(e.message)

    打印处理以后乱码了。我们在读csv时候最好指定编码,我的本地GBK:

    df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv',encoding='gbk')

    我们可以正常的打印信息了,但是又报错了,错误如下:

    UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)

    还是编码问题,原因呢,我们存到数据库时候没有指定编码。解决这个问题时候也是被坑了一把,网上说什么的都有。过程就不说了,看代码:

    engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s?charset=utf8") % (user, password, host, db))

    解决了

    相关文章:

    Python数据分析之真实IP请求Pandas详解

    通过Python中的pandas库对cdn日志进行分析详解

    用Python的pandas框架操作Excel文件中的数据教程

    以上就是Python用Pandas读CSV文件写到MySQL的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:mysql python
    上一篇:详解python中无法正确读取.mat文件的解决办法 下一篇:RabbitMQ快速入门python教程
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• Python数据类型简介之numpy• python虚拟环境配置与管理• 实例分享8个Python自动化脚本• 总结分享Python冷门的技巧• 聊聊Python中列表和字典前加星号(**)
    1/1

    PHP中文网