python怎么把Excel表格里的所有数据批量导入 sql Server数据库?

python怎么把Excel表格里的所有数据批量导入 sql Server数据库?

麻烦提供一下,excel的表头诶,好创建一个表,方便你使用

按照下面的代码模版就能实现你的需求了:
主要修改以下几处:

  • load(f'D:/tmp/bianzu/mtf.csv'):此处替换为你的csv文件目录

  • sql = "INSERT INTO DW.dbo.MTF_frequency(project_name,mtf_frequency,lens_structure,control_field,air_gap) VALUES (%s,%d,%s,%s,%s)":此处修改为你的数据库名称和表名,字段替换为你的字段,一个字段对应一个%s,csv有多少列就是多少个字读


import pandas as pd
from pyspark import SQLContext
from pyspark.sql import SparkSession
import pymssql


# 利用SQLContext读取csv文件
spark=SparkSession.builder.appName('bianzu').getOrCreate()
sqlContext = SQLContext(spark)

# 读取csv文件
raw_date = sqlContext.read.format('com.databricks.spark.csv').options(header='True',inferschema='true',encoding='GBK').load(f'D:/tmp/bianzu/mtf.csv')
raw_date.show()
raw_date = raw_date.toPandas()

#csv中可能会有空值
# pyspark读取csv后,数据有null值无法插入数据库,把null转化为None,确保数据能插入数据库
raw_date = raw_date.astype(object).where(pd.notnull(raw_date),None)
print(raw_date.dtypes)

val = [tuple(item)  for item in raw_date.values]
print(val)

#连接sqlserver数据库
sql_db = pymssql.connect(server='10.178.13.1', port=1433, user='rw-etl', password='rw-etl.aac', database='DW')
sql_cursor = sql_db.cursor()
# 往数据库执行插入的sql命令
sql = "INSERT INTO DW.dbo.MTF_frequency(project_name,mtf_frequency,lens_structure,control_field,air_gap) VALUES (%s,%d,%s,%s,%s)"

# 批量执行多条插入SQL语句
sql_cursor.executemany(sql,val)
sql_db.commit()
sql_db.close()



'''
批量处理所有excel数据
'''
# 数据文件都存储在某个指定目录下,如:
files_path = './data/'
bf_path = './process/'
 
# 获取当前目录下所有文件名称
# files = os.listdir(files_path)
# files
 
# 表名:附件excel名
data_dict = {
    'testa': ['test1.xls', 'test2.xls'], 
    'testb': ['test3.xls'], 
    'testc': ['test4.xls']
}
 
# 选取附件中的指定列,只存入指定列数据
columns_a = ['S/No', 'SOID #', 'Current MileStone', 'Store In Date Time']
columns_b = ['Received Part Serial No', 'Received Product Category', 'Received Part Desc']
columns_c = ['From Loc', 'Orig Dispoition Code']
 
columns = [columns_a, columns_b, columns_c]
flag = 0  # 列选择标记
 
# 遍历字典 合并相关excel 然后处理数据后,存入sql
for k,v in data_dict.items():
    table_name = k
    data = merge_excel(v, files_path)
    # 1、处理数据
    if 'SOID #' not in data.columns:
        # 不包含要处理的列,则直接简单去重后、存入数据库
        data.drop_duplicates(inplace=True)
    else:
        # 特别处理数据
        data = process_data(data)
    # 2、存储数据
    # 保险起见 本地也存一份
    data.to_excel(bf_path+table_name+'.xls')
    # 存储到数据库
    data_to_sql(data, table_name, columns[flag])
    flag+=1

https://www.cnblogs.com/longbigbeard/p/9317141.html

kettle 工具了解一下

哈?为啥你又问了个,还有钱
https://blog.csdn.net/hymn1993/article/details/122872480

关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:使用python把数据从excel 插入到sql server的操作流程
  • import pandas as pd
    import pymssql as ps
    str1='你excel的路径.xlsx'
    pd1=pd.read_excel(str1,sheet_name='表格名称')
    conn=ps.connect(host='数据库ip',user='账号',password='密码',database='数据库名称',charset='编码一般utf-8')
    cur=conn.cursor()
    query1="""if exists (select * from sysobjects where id = object_id(N'表名') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
        drop table 表名"""
    
    cur.execute(query1)

query2="""CREATE TABLE 表名
(
name varchar(30),
dm varchar(20),
zt varchar(30)
添加你要的字段,用英文逗号隔开,最后不用,这里建议你都用文本格式
);"""
cur.execute(query2)
query3 = """insert into ywydm values (%s,%s,%s,几个字段就用几个%s)"""
for r in range(0,len(pd1)):
nm=pd1.iloc[r,0]
dm1=pd1.iloc[r,1]
czt=pd1.iloc[r,2]
几个字段一个个加上去 czt=pd1.iloc[r,2] 注意字段顺序
print(r)
values=(str(nm),str(dm1),str(czt)这里也要添加你的字段)
cur.execute(query3,values)
cur.close()
conn.commit()
conn.close()
自用代码 望采纳


import pymysql
import xlrd
 
 
'''
    连接数据库
    args:db_name(数据库名称)
    returns:db
     
'''
def mysql_link(de_name):
    try:
        db = pymysql.connect(host="127.0.0.1", user="root",
                             passwd="XXX",
                             db=de_name,
                             charset='utf8')
        return db
    except:
        print("could not connect to mysql server")
 
 
'''
    读取excel函数
    args:excel_file(excel文件,目录在py文件同目录)
    returns:book
'''
def open_excel(excel_file):
    try:
        book = xlrd.open_workbook(excel_file)  #文件名,把文件与py文件放在同一目录下
        return book
    except:
        print("open excel file failed!")
 
 
'''
    执行插入操作
    args:db_name(数据库名称)
         table_name(表名称)
         excel_file(excel文件名,把文件与py文件放在同一目录下)
          
'''
def store_to(db_name,table_name,excel_file):
    db = mysql_link(db_name)  # 打开数据库连接
    cursor = db.cursor()  # 使用 cursor() 方法创建一个游标对象 cursor
 
    book = open_excel(excel_file)   # 打开excel文件
    sheets = book.sheet_names()   # 获取所有sheet表名
    for sheet in sheets:
        sh = book.sheet_by_name(sheet)   # 打开每一张表
        row_num = sh.nrows
        print(row_num)
        list = []   # 定义列表用来存放数据
        for i in range(1, row_num):  # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
            row_data = sh.row_values(i)  # 按行获取excel的值
            value = (row_data[0], row_data[1],row_data[2],row_data[3],row_data[4],row_data[5],\
                     row_data[6],row_data[7],row_data[8],row_data[9],row_data[10],row_data[11],row_data[12],row_data[13],row_data[14])
            list.append(value)  # 将数据暂存在列表
            # print(i)
        sql = "INSERT INTO "+ table_name + " ( bj_shijian,bjr_xingbie,anfa_didian,\
            zb_x,zb_y,bj_chongfu,jiejing_lb_name,baojing_lb_name,baojing_lx_name,baojing_lx_xl_name,\
            guanxia_qy_name,guanxian_dw_name,anfa_qulu,anfa_xiaoqu,chujing_dw_name)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
        cursor.executemany(sql, list)  # 执行sql语句
        db.commit()  # 提交
        list.clear()  # 清空list
        print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")
    cursor.close()  # 关闭连接
    db.close()
 
 
if __name__ == '__main__':
    store_to('demo','demo_yangben','qh.xlsx')