• dataframe写入mysql时候,对齐DataFrame的columns和SQL的字段名


    在python中
    sql=“xxxxxxxx”
    cursor.execute(sql)
    execute提交的是 个字符串,所以考虑格式化字符串传参

    insert into (%s,%s,%s,%s、、、、)values(%s,%s,%s、、、)
    1
    这样的结果就是当字段特别大的时候能累死,而且我又很懒
    最重要的是当换个数据库的时候又废了

    sql="insert into (%s,%s,%s,%s、、、、)values(%s,%s,%s、、、)"
    1
    都在引号里面,n个 %s 和一个 %s 也没什么区别吧!!!
    所以我就想着把整个字段名和逗号一起拼接成一个字符串

    import pymysql
    import pandas as pd
    import numpy as np
    # 定义函数
    def w_sql(sql_name,data,zd):
        connent = pymysql.connect(host='xxx', user='xxx', passwd='xxxx', db='xxxx', charset='xxx') #连接数据库
        cursor = connent.cursor()#创建游标
        for i in data.values:
            va=""
            for j in i:
                if pd.isnull(j):
                    va=va+","+'null' #缺失值判断和转换
                else:
                    va=va+","+"'"+str(j)+"'"
            sql="""insert ignore into %s (%s) values(%s)"""%(sql_name,zd[:-1],va[1:])
    #         print(sql)
            cursor.execute(sql)
        connent.commit() #提交事务
        cursor.close()#关闭游标
        connent.close()#断开连接
        
    #主程序
    data=pd.read_excel("./test.xlsx")
    sql_name='test'
    zd=""
    for j in data.columns:
        zd=zd+j+","
    w_sql(sql_name,data,zd)

    结果如下图,字段始终对齐,不受位置干扰,
    【注意】
    ①ignore 是忽略主键重复,
    最开始的版本是不设置主键,选取dataframe第一个元素在 数据库里进行select,
    版本二 发现第一个元素不准,所以又read_sql_table读取整个数据库,对dataframe 进行布尔筛选

    最终拼接了个主键,用ignore忽略重复——注意去除警告,否则多次运行就会一片红红火火

    这里给出警告过滤的代码

    # 警告过滤
    # 可以通过调用filterwarnings()将规则添加到过滤器
    # 并通过调用resetwarnings()将其重置为默认状态
    # warnings.filterwarnings("ignore")
    1
    2
    3
    4
    ②因为是拼接的字符串所以数据库对应要设置为char/varchar

    ③commit的缩进位置
    因为是dataframe一行行执行写入,最后循环完一整个dataframe统一commit
    当数据量大的时候commit的位置很影响效率
    connent.commit() #提交事务



    原文链接:https://blog.csdn.net/qq_35866846/article/details/101712273

  • 相关阅读:
    some things
    关于我的兼职创业历程
    慢牛APP相关截图
    慢牛系列五:用百度语音识别添加自选股
    慢牛系列四:好玩的React Native
    慢牛系列三:React Native实践
    慢牛系列二:前端技术选择
    慢牛系列一:如何抓取股票数据
    会写程序的屌丝是潜力股
    慢牛股票-基于Sencha+Cordova的股票类APP
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/16359304.html
Copyright © 2020-2023  润新知