确保安装 xlrd
将excel表格文件放在.py文件相同的路径下
SC表格内容如图所示
在SQL Server中创建表,表名submit
S#,C#的数据类型都是nchar(10),Score数据类型为整型
程序代码
import xlrd
import pymssql
def output(array):
for i in range(len(array)):
for j in range(len(array[0])):
print(array[i][j],end='')
print(' ',end='')
print(' ')
conn = pymssql.connect(server='DESKTOP-LYZ', user='sa', password='12345', database='test')
cursor = conn.cursor()
sqlNonQuery = "Delete from submit "
cursor.execute(sqlNonQuery)
chart = xlrd.open_workbook("SC.xlsx")
sheet = chart.sheet_by_name("Sheet1")
for i in range(1,sheet.nrows):
l = sheet.row_values(i)
Snum=l[0].rstrip()
Cnum=l[1].rstrip()
Score=l[2]
sqlNonQuery="insert into submit values('%s','%s',%d)"%(Snum,Cnum,Score)
cursor.execute(sqlNonQuery)
conn.commit()
sqlQuery = "select * from submit" #查(查询语句Query),检验是否导入成功
cursor.execute(sqlQuery)
results = cursor.fetchall()
output(results)
conn.close()
特别注意
①"SC.xlsx"为excel文件名,且要确保excel表格文件放在.py文件相同的路径下,否则会报错
chart = xlrd.open_workbook("SC.xlsx")
②sheet为excel中的表名,一般默认为sheet1
sheet = chart.sheet_by_name("Sheet1")
③这个将submit表删除的操作是保证每次导入excel表时,数据库中submit表的内容和每次导入的excel中的内容完全一致,而与之前submit表的内容无关
sqlNonQuery = "Delete from submit "
cursor.execute(sqlNonQuery)
举个栗子,连续运行两次程序,第一次带有上面两行。第二次不带,最后一次运行程序的执行结果分别如下:
可以发现,加上以下两行代码
sqlNonQuery = "Delete from submit "
cursor.execute(sqlNonQuery)
在submit表中,程序第二次执行结束后的结果就不会“堆积”
当然,如果只导入一次,Delete就没有任何意义了,可加可不加。
④有的时候excel表格的第一行是表头不是数据,但不希望把表头内容当作数据导入到数据库中,比如:
解决的办法是for循环从1开始而不是从0开始:
for i in range(1,sheet.nrows):
l = sheet.row_values(i)
如果excel的第一行就是数据也需要导入到数据库中,就让for循环从0开始即可
for i in range(sheet.nrows):
l = sheet.row_values(i)