如何将csv或TXT文件直接导入MySQL

可使用load data方法,将大量数据由CSV文件或TXT文件直接导入MySQL数据库,具体命令如下:

LOAD DATA LOCAL INFILE 'csv_file_path' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES

csv_file_path 指文件绝对路径

table_name 指表名称

FIELDS TERMINATED BY ',' 指以逗号分隔

LINES TERMINATED BY '\\r\\n' 指换行

IGNORE 1 LINES 指跳过第一行,因为第一行是表的字段名

可在MySQL命令行中直接使用该语句,也可使用如下python程序:

# 导入pymysql方法
import pymysql


# 连接数据库
config = {'host': 'localhost',
          'port': 3306,
          'user': 'root',
          'passwd': 'wkr123456',
          'charset': 'utf8mb4',
          'local_infile': 1
          }
conn = pymysql.connect(**config)
cur = conn.cursor()




# load_csv函数,参数分别为csv文件路径,表名称,数据库名称
def load_csv(csv_file_path, table_name, database='memtest'):
    # 打开csv文件
    file = open(csv_file_path, 'r', encoding='utf-8')
    # 读取csv文件第一行字段名,创建表
    reader = file.readline()
    b = reader.split(',')
    colum = ''
    for a in b:
        colum = colum + a + ' varchar(255),'
    colum = colum[:-1]
    # 编写sql,create_sql负责创建表,data_sql负责导入数据
    create_sql = 'create table if not exists ' + table_name + ' ' + '(' + colum + ')' + ' DEFAULT CHARSET=utf8'
    data_sql = "LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES" % (csv_file_path, table_name)


    # 使用数据库
    cur.execute('use %s' % database)
    # 设置编码格式
    cur.execute('SET NAMES utf8;')
    cur.execute('SET character_set_connection=utf8;')
    # 执行create_sql,创建表
    cur.execute(create_sql)
    # 执行data_sql,导入数据
    cur.execute(data_sql)
    conn.commit()
    # 关闭连接
    conn.close()
    cur.close()


if __name__ == '__main__':
    load_csv("/home/wangkr/kafka-exp/data/train.csv","shoppinginfo_log")

猜你喜欢

转载自blog.csdn.net/Kolunm/article/details/107932763