@使用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...