可以使用pandas庫(kù)來(lái)讀取CSV文件,并使用mysql-connector庫(kù)來(lái)連接MySQL數(shù)據(jù)庫(kù)并寫(xiě)入數(shù)據(jù)。以下是一個(gè)示例代碼:
import os
import pandas as pd
import mysql.connector
# MySQL數(shù)據(jù)庫(kù)連接信息
db_config = {
'user': 'your_username',
'password': 'your_password',
'host': 'your_host',
'port': 3306,
'database': 'your_database',
'auth_plugin': 'mysql_native_password'
}
# 要讀取的目錄
directory = 'path_to_directory'
# 獲取目錄下所有CSV文件名
csv_files = [f for f in os.listdir(directory) if f.endswith('.csv')]
# 遍歷所有CSV文件
for csv_file in csv_files:
# 讀取CSV數(shù)據(jù)為DataFrame
df = pd.read_csv(os.path.join(directory, csv_file))
# 連接MySQL數(shù)據(jù)庫(kù)
cnx = mysql.connector.connect(**db_config)
# 創(chuàng)建MySQL數(shù)據(jù)庫(kù)表,表名與CSV文件名相同
cursor = cnx.cursor()
table_name = os.path.splitext(csv_file)[0].lower()
create_table_query = f"CREATE TABLE IF NOT EXISTS {table_name} ({','.join([f'{col} VARCHAR(255)' for col in df.columns])})"
cursor.execute(create_table_query)
# 批量寫(xiě)入數(shù)據(jù)到MySQL數(shù)據(jù)庫(kù)表
insert_query = f"INSERT INTO {table_name} ({','.join(df.columns)}) VALUES ({','.join(['%s']*len(df.columns))})"
insert_data = [tuple(row) for _, row in df.iterrows()]
cursor.executemany(insert_query, insert_data)
# 提交事務(wù)并關(guān)閉MySQL數(shù)據(jù)庫(kù)連接
cnx.commit()
cursor.close()
cnx.close()
在上述代碼中,需要替換掉以下變量的值:
your_username
:MySQL數(shù)據(jù)庫(kù)用戶名your_password
:MySQL數(shù)據(jù)庫(kù)密碼your_host
:MySQL數(shù)據(jù)庫(kù)主機(jī)名或IP地址your_database
:MySQL數(shù)據(jù)庫(kù)名稱path_to_directory
:要讀取的目錄路徑
該代碼將逐一遍歷目錄下所有CSV文件,對(duì)于每個(gè)文件,將其讀取為DataFrame并創(chuàng)建與文件名相同的MySQL數(shù)據(jù)庫(kù)表,最后將數(shù)據(jù)以批量方式寫(xiě)入數(shù)據(jù)庫(kù)表中。注意,該代碼假設(shè)CSV文件中第一行為表頭,且表頭中的每一列均為字符串類型。如果CSV文件存在其他數(shù)據(jù)類型,需要根據(jù)實(shí)際情況進(jìn)行修改。