zoukankan      html  css  js  c++  java
  • 通过Python从redshift读取数据将数据写入mysql数据库(遇到在插入mysql数据库的时候数据类型处理问题)

    这几天在将数据从redshift读取数据然后写入mysql数据库自动创建表的,然后把数据插入到数库的操作。

    我们通过读取sql的形式,将数据读取进来是一个dataframe。

    data = pd.read_sql(sql, rs_engine)

    然后再将这个dataframe写出去到mysql数据库通过

    data.to_sql()的形式将数据写出去。

     但是在将读取到的数据写出到mysql数据库的时候数据类型原来的varchar 变为了text 类型,因为text类型在数据库当中占的内存非常多,所以我们要将数据类型进行转化。

    如果不进行处理的话,varchar在读取进来是object 类型。写出去就是text 系统默认分配最长的长度给他。

    所以我们通过 

    desc tablename 这个时候我们看到数据类型是text。

    通过网上找资料,我们要对数据类型进行转化。具体的做法如下:

    def mapping_df_types(df):
        dtypedict = {}
        for i, j in zip(df.columns, df.dtypes):
            if "object" in str(j):
                dtypedict.update({i: NVARCHAR(length=255)})
            if "float" in str(j):
                dtypedict.update({i: Float(precision=2, asdecimal=True)})
            #if "float" in str(j):
                #dtypedict.update({i: Numeric(precision=18,scale=4, asdecimal=True)})
            if "int" in str(j):
                dtypedict.update({i: Integer()})
        return dtypedict

    dtypedict = mapping_df_types(data)
    data.to_sql(totablename,mysql_engine,schema=con["database"],if_exists='replace',
    index=False,index_label=False, dtype=dtypedict)

    定义一个函数,将字段和对应的数据类型进行重新匹配然后将数据生成mysql想要的数据类型。
    具体的操作详见博客:https://blog.csdn.net/u011884100/article/details/90715359

    至此问题得到解决:(执行的结果如下图所示)

  • 相关阅读:
    ASP.Net Cms
    GetHashCode函数所存在的陷阱
    NH的系统架构
    Icomparable<T> 和 Icomparaer<T> 实现顺序关系
    《创业法典》:用流程图告诉你如何创业
    创业之前,网站先行
    杨卫华:新浪微博的架构发展历程
    技术开发人员为什么会无奈苦逼?
    使用面向对象的、完整的单点登录功能
    SilverLight之我见
  • 原文地址:https://www.cnblogs.com/gxgd/p/11984102.html
Copyright © 2011-2022 走看看