csv批量匯入mysql

2021-10-07 08:14:55 字數 3759 閱讀 1680

@使用python將csv檔案批量匯入mysql

附上**:

#-- coding: utf-8 --

###換成讀入pandas再讀進sql的方法

import pandas as pd

import numpy as np

import csv

from pandas import series,dataframe

##將csv檔案內容存入資料庫

#首先匯入pymysql庫

import pymysql

# 引數設定 dictcursor使輸出為字典模式 連線到本地

config =

dict

(host=

'localhost'

, user=

'root'

, password=

'******'

, cursorclass=pymysql.cursors.dictcursor

)# 建立連線

conn = pymysql.connect(

**config)

# 自動確認commit true

conn.autocommit(1)

# 設定游標

cursor = conn.cursor(

)# 乙個根據pandas自動識別type來設定table的type

defmake_table_sql

(df)

: columns = df.columns.tolist(

) types = df.ftypes

# 新增id 制動遞增主鍵模式

make_table =

for item in columns:

if'int'

in types[item]

: char =

'`'+item +

'`'+

' int'

elif

'float'

in types[item]

: char =

'`'+item +

'`'+

' float'

elif

'object'

in types[item]

: char =

'`'+item +

'`'+

' mediumtext'

elif

'datetime'

in types[item]

: char =

'`'+item +

'`'+

' datetime'

return

','.join(make_table)

# csv 格式輸入 mysql 中

defcsv2mysql

(db_name, table_name, df)

:# 建立database

cursor.execute(

'create database if not exists {}'

.format

(db_name)

)# 選擇連線database

conn.select_db(db_name)

# 建立table

cursor.execute(

'drop table if exists {}'

.format

(table_name)

) data_sql =

'create table %s (%s)'

%(table_name,make_table_sql(df)

) cursor.execute(data_sql)

# 提取資料轉list 這裡有與pandas時間模式無法寫入因此換成str 此時mysql上格式已經設定完成

# df['日期'] = df['日期'].astype('str')

values = df.values.tolist(

)# 根據columns個數

s =','.join(

['%s'

for _ in

range

(len

(df.columns))]

)# executemany批量操作 插入資料 批量操作比逐個操作速度快很多

cursor.executemany(

'insert into {} values ({})'

.format

(table_name,s)

, values)

##測試單個csv檔案匯入是否成功

# path = r'路徑

# df2 = pd.read_csv(path)

# df1 = df2.astype(object).where(pd.notnull(df2), none)

# csv2mysql(db_name='資料庫名', table_name='表名', df=df1)

##得到了所有的檔名,並且存入了file_path集合

file_dir=

'檔案儲存的目錄路徑'

for root, dirs, files in os.walk(file_dir)

:#print(root) #當前目錄路徑

#print(dirs) #當前路徑下所有子目錄

filen =files

#print(type(filen)) #當前路徑下所有非目錄子檔案

file_path =

for a in filen:

##file_path為所有期刊路徑的list

'\\'

+a)#print(file_path)

# for a in filen:##這段**不成功的原因是將filepath存成了二維list

# file_path_str = root + '\\'+ a+','

# file_path = file_path_str.split(',')

# file_path.pop(-1) ##file_path為所有期刊路徑的list

# print(file_path)

for b in file_path:

# path = "r\'"+ b +"\'"

# print(path)

df2 = pd.read_csv(b,encoding=

'utf-8-sig'

)#print(df2)

df1 = df2.astype(

object

).where(pd.notnull(df2)

,none

)## 將nan值轉換為none

path_split = b.split(

'\\'

) table_name1 = path_split[-1

] table_name2 = table_name1.split(

'.')

table_name =table_name2[0]

##得到table name

# print(csv_file_path)

print

(table_name)

csv2mysql(db_name=

'資料庫名'

, table_name=table_name, df=df1)

csv批量匯入mysql命令

基本語法 load data low priority local infile file name txt replace ignore into table tbl name character set gbk fields terminated by t optionally enclosed...

Mysql 匯入csv檔案

mysql load data infile命令可以把csv平面檔案中的資料匯入到資料庫中。linux下 load data infile home test dump ip location.csv into table ip location character set utf8 fields ...

CSV檔案匯入MySQL

1 首先看一下我本次匯入的資料,比較簡單 1 在資料庫中首先建立了乙個名為 test 的資料庫,在test資料庫下建立了乙個名為 student 的 屬性如下 column name datatype note idint 11 primary key,not null name varchar 4...