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
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')