python 将csv文件导入到mysql中去

本文介绍了如何使用Python 2.7将包含首行字段名和不包含首行字段名的CSV文件导入到MySQL数据库中,特别提醒CSV文件不应使用中文命名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python,2.7  将csv文件导入到mysql中去; 将csv文件放到指定目录里面,最好不要是中文命名

1.csv文件中存有首行字段名

2.没有首行字段名

#!/usr/bin/python
# -*- coding=utf-8 -*-
import xlrd
import string
import os
import pymysql
import time
import datetime
import sys
reload(sys)
sys.setdefaultencoding("utf8")




def IsSubString(SubStrList,Str):
    '''''
    #判断字符串Str是否包含序列SubStrList中的每一个子字符串
    #>>>SubStrList=['F','EMS','txt']
    #>>>Str='F06925EMS91.txt'
    #>>>IsSubString(SubStrList,Str)#return True (or False)
    '''
    flag=True
    for substr in SubStrList:
        if not(substr in Str):
            flag=False
    return flag



def fn_get_filelist(FindPath,FlagStr=[]):
    '''''
    #获取目录中指定的文件名
    #>>>FlagStr=['F','EMS','txt'] #要求文件名称中包含这些字符
    #>>>FileList=GetFileList(FindPath,FlagStr) #
    '''
    FileList=[]
    FileNames=os.listdir(FindPath)
    if (len(FileNames) > 0):
       for fn in FileNames:
           if (len(FlagStr) > 0):
               #返回指定类型的文件名
               if (IsSubString(FlagStr,fn)):
                   fullfilename=os.path.join(FindPath,fn)
                   FileList.append(fullfilename)
           else:
               #默认直接返回所有文件名
               fullfilename=os.path.join(FindPath,fn)
               FileList.append(fullfilename)
    #对文件名排序
    if (len(FileList)>0):
        FileList.sort()
    for i in range(len(FileList)):
        print FileList[i]
    print FileList
    return FileList


def fn_exists_drop(f):

    t_prefix = 'tmp_excel' + time.strftime("%Y%m%d",time.localtime()) + '_'
    tt = 'drop table if exists `' + t_prefix + unicode(f.split("\\")[-1].split(".")[0],"utf-8") + '`; '


    return tt


def fn_getFirsRow(f,isHaveTitle,splitBy):
    ff = open(f)
    ffline=0
    for fline in ff :
        ffline = ffline + 1
        fl = fline
        break
    return fl

        #print cols,len(cols)
    #pass


def fn_insert_by_txt(f,  isHaveTitle):
    print 'f'*100
    tablename = f.split('\\')[1]
    print 'tablename=' ,tablename

    mydb = pymysql.connect("127.0.0.1","root","Root123.","jintai2",port=3306,charset='utf8' )
    mycursor = mydb.cursor()
    mycursor.execute('SET CHARACTER SET utf8;')
    mycursor.execute('SET NAMES utf8;')
    mycursor.execute('SET character_set_connection=utf8;')
    ff = open(f)
    print '.'*100
    lineNum = 0
    for fline in ff :
        lineNum += 1
        if lineNum==1 and isHaveTitle==1 :
            # tablename.decode('utf8') + */ unicode(utf8string, "utf-8") unicode(utf8string, "utf-8")
            print '-'*10
            flines = fline.decode('gb2312')
            print type(fline)    #+ fline.replace('"','`').replace(',',' varchar(255) ,')
            tExists, tExists_sql = 0, "SELECT COUNT(*) FROM `information_schema`.`TABLES` AS a WHERE a.`TABLE_SCHEMA` = DATABASE() AND table_name ='"+tablename+"'"
            mycursor.execute(tExists_sql)
            rExists = mycursor.fetchall()
            for rr in rExists:
                tExists = rr[0]
                print 'tExists',tExists
            if tExists==1:
                cols_sql = " SELECT GROUP_CONCAT( CONCAT('`',a.`COLUMN_NAME`,'`')  ORDER BY `ORDINAL_POSITION`) FROM `information_schema`.`COLUMNS` AS a WHERE a.`TABLE_SCHEMA` = DATABASE()  AND COLUMN_NAME<>'pkid' AND table_name ='"+tablename+"'"
                mycursor.execute(cols_sql)
                cExists = mycursor.fetchall()
                for cc in cExists:
                    cols = cc[0]
                    print type(cols),cols
                    #sys.exit()

            else:
                sqlCreate =  ' create table if not exists `' + tablename +'`( '  + flines.replace('"','`').replace(',',' varchar(255) ,') +   '  varchar(225) , pkid int AUTO_INCREMENT primary key )'
                cols = flines.replace('"','`')
                print sqlCreate
                mycursor.execute(sqlCreate)
                mydb.commit()
        else:
            try:
                insertSql = ' insert into `' + tablename + '`  (' + cols + ' ) values ( '
                flines = fline.decode('gb2312')
                v = (  flines.replace(chr(39),'”').replace('\n',''))
                #print type(v)
                insertSql =  insertSql  + v + ')'
                #print insertSql
                mycursor.execute(insertSql)
                print tablename ,lineNum
                if lineNum/100==0   :
                    mydb.commit()

            except Exception , e:
                print e
    mydb.commit()
    ff.close()


def fn_arr_maxLen(arr):
    o = 0
    for v in arr:
        if (len(str(v).strip()) > o):
            o = len(str(v).strip())
    return o

if __name__ == '__main__':

    fs=fn_get_filelist(u"F:/dm_excel",['csv'])
    print fs
    for f in fs:
        fn_insert_by_txt(f,   1)


 

 

可以使用Python中的pandas库和MySQLdb库来实现将csv文件导入到MySQL数据库中的操作,具体步骤如下: 1. 安装pandas库和MySQLdb库: ```python !pip install pandas !pip install mysqlclient ``` 2. 导入需要的库: ```python import pandas as pd import MySQLdb ``` 3. 读取csv文件并将数据存储在DataFrame对象中: ```python data = pd.read_csv('your_csv_file.csv') ``` 4. 建立与MySQL数据库的连接: ```python conn = MySQLdb.connect(host='your_host', port=your_port, user='your_username', passwd='your_password', db='your_database') ``` 5. 将数据写入MySQL数据库: ```python data.to_sql(name='your_table_name', con=conn, if_exists='replace', index=False) ``` 以上代码中,name参数表示要写入的表名,con参数表示与数据库建立的连接对象,if_exists参数表示如果表已经存在则替换原有表,index参数表示不需要将DataFrame对象的索引写入数据库。 完整代码如下: ```python import pandas as pd import MySQLdb # 读取csv文件并将数据存储在DataFrame对象中 data = pd.read_csv('your_csv_file.csv') # 建立与MySQL数据库的连接 conn = MySQLdb.connect(host='your_host', port=your_port, user='your_username', passwd='your_password', db='your_database') # 将数据写入MySQL数据库 data.to_sql(name='your_table_name', con=conn, if_exists='replace', index=False) # 关闭连接 conn.close() ``` 注意:在执行以上代码之前,需要先在MySQL数据库中创建好对应的表,使其与csv文件中的列名一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值