csv文件快速轉存到mysql


csv文件快速轉存到mysql

連接數據庫

連接數據庫:
	con = pymysql.connect(user="root",
                      passwd="root",
                      db="test",
                      host="47.95.xxx.xxx", 
                      local_infile=1)

將csv批量寫到數據庫,需要設置local_infile參數,如果不添加會報錯。!

連接完數據庫我們便可以使用游標來執行sql語句了:

cur = con.cursor()
定義好了游標我們就可以使用execute方法來執行sql語句了。

cur.execute("set names utf8")
cur.execute("SET character_set_connection=utf8;")

讀取csv文件內容:

with open(file_path, 'r', encoding='utf8') as f:
    reader = f.readline()
    print(reader)
    devide = reader.split(',')  # 做成列表
    devide[-1] = devide[-1].rstrip('\n')   # 去除最后的換行符
    print(devide)

創表:

需要創建表,在創建表之前我們需要將每個列指定一下格式:

column = ''
for dd in devide:
    column = column + dd + ' varchar(255),'

拼接好后我們需要將最后一個列的逗號去掉
col = column.rstrip(',')

創建表:
table_name = "TBexport"
create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'\
    .format(table_name, col)
cur.execute(create_table_sql)


插入數據的語句:

file_path = "export.csv"
data = 'LOAD DATA LOCAL INFILE \'' + file_path \
       + '\'REPLACE INTO TABLE ' \
       + table_name \
       + 'CHARACTER SET UTF8 FIELDS TERMINATED BY \',' \
         '\' ENCLOSED BY \'\"\' ' \
         'LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'
cur.execute(data.encode('utf8'))

con.commit()  # 提交事務

關閉游標和數據庫連接。
cur.close()
con.close()

csv數據導入樣式:

mysql支持csv數據的導入,以下是sql的語法:

LOAD DATA INFILE '文件名'
REPLACE INTO TABLE 表名
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'

ENCLOSED BY '"'
LINES TERMINATED BY '\n'

完整腳本:

import pymysql

# file_path = "exam.csv"
# table_name = 'update_time_table'
file_path = "export.csv"
table_name = "TBexport"
try:
    con = pymysql.connect(user="root",
                          passwd="root",
                          db="test",
                          host="47.95.20x.xxx",
                          local_infile=1)
    con.set_charset('utf8')
    cur = con.cursor()
    cur.execute("set names utf8")
    cur.execute("SET character_set_connection=utf8;")

    with open(file_path, 'r', encoding='utf8') as f:
        reader = f.readline()
        print(reader)
        devide = reader.split(',')  # 做成列表
        devide[-1] = devide[-1].rstrip('\n')  # 去除最后的換行符
        print(devide)

    column = ''
    for dd in devide:
        #如果標題過長,只能存成text格式
        if dd == "標題":
            column = column + dd + ' TEXT,'
        else:
            column = column + dd + ' varchar(255),'
    col = column.rstrip(',')  # 去除最后一個多余的,
    # print(column[:-1])
    create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'.format(table_name, col)
    print(create_table_sql)
    data = 'LOAD DATA LOCAL INFILE \'' + file_path + '\'REPLACE INTO TABLE ' + table_name + ' CHARACTER SET UTF8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'
    cur.execute(create_table_sql)
    cur.execute(data.encode('utf8'))
    print(cur.rowcount)
    con.commit()
except:
    print("發生錯誤")
    con.rollback()

finally:
    cur.close()
    con.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM