python读取excel的第一行创建数据库表,其他行作为表的数据

import pandas as pd
import mysql.connector
from mysql.connector import Error

# 读取 Excel 文件
df = pd.read_excel('钢铁数据源.xlsx', engine='openpyxl')

# 打印出所有列,检查是否正确读取
print("Columns in the dataframe:", df.columns)

# Clean the column names to ensure no extra spaces
df.columns = df.columns.str.strip()

# 将 'input_date' 列转换为 'YYYY-MM-DD' 格式的字符串
df['input_date'] = pd.to_datetime(df['input_date'], errors='coerce').dt.strftime('%Y-%m-%d')

# 打印数据框架查看数据
print(df.head())

# 创建数据库连接
def create_connection():
    try:
        connection = mysql.connector.connect(
            host='127.0.0.1',
            database='healthy',
            user='root',
            password='123456'
        )
        return connection
    except Error as e:
        print(f"Error: {e}")
        return None

# 创建表格
def create_table(cursor, table_name, columns):
    # 删除旧表
    cursor.execute(f"DROP TABLE IF EXISTS {table_name};")
    print(f"Old table {table_name} dropped.")

    # Define column definitions, mapping DataFrame columns to SQL types
    columns_with_comments = ["`input_date` DATE"]
    for col in columns[1:]:  # Skip 'input_date' as it's already added
        columns_with_comments.append(f"`{col}` DECIMAL(10, 2)")  # Use DECIMAL for numeric scrap arrival data

    create_table_query = f"CREATE TABLE IF NOT EXISTS {table_name} ({', '.join(columns_with_comments)});"
    print("Creating table with the following query:")
    print(create_table_query)
    cursor.execute(create_table_query)

# 将 Excel 数据插入数据库
def insert_data(cursor, table_name, data, columns):
    placeholders = ', '.join(['%s'] * len(columns))
    column_names = ', '.join([f'`{col}`' for col in columns])
    insert_query = f"INSERT INTO {table_name} ({column_names}) VALUES ({placeholders})"
    cursor.execute(insert_query, data)

def main():
    # 连接到数据库
    connection = create_connection()
    if connection is None:
        return

    cursor = connection.cursor()

    # 目标表名
    table_name = 'steel_scrap_arrival'

    # Use DataFrame columns directly
    columns = df.columns.tolist()

    # 创建表
    create_table(cursor, table_name, columns)

    # 插入数据,跳过第一行(表头),从第二行开始(index 0)
    for row in df.itertuples(index=False, name=None):  # Directly iterate over rows, starting from index 0
        data = [(None if pd.isna(x) else x) for x in row]  # Handle NaN as None
        insert_data(cursor, table_name, data, columns)

    # 提交事务
    connection.commit()
    print("Data inserted successfully.")

    # 关闭连接
    cursor.close()
    connection.close()

if __name__ == "__main__":
    main()

你可能感兴趣的:(python,excel,数据库)