彰化一整天的論壇

 找回密碼
 立即註冊
查看: 82|回復: 0

python整批資料庫新增

[複製鏈接]
發表於 2021-3-18 08:45:13 | 顯示全部樓層 |閱讀模式
  1. import pymssql
  2. import datetime
  3. import decimal
  4. from datetime import datetime
  5. import pyodbc

  6. def SQLToString(conn,strSQL):
  7.     cursorCourseMap =conn.cursor(as_dict=False)
  8.     cursorCourseMap.execute(strSQL)

  9.     rowCourseMap=cursorCourseMap.fetchone()

  10.     if rowCourseMap:
  11.             return rowCourseMap[0]
  12.     else:
  13.             return "0"


  14. connCourseMap = pymssql.connect(server='10.0.0.50',user="bestdaylong", password="bestdaylong", database="CourseMapDataBase")

  15. connCourseMany=pyodbc.connect('DRIVER={SQL Server};PORT=1433;SERVER=10.0.0.50;DATABASE=CourseMapDataBase;UID=bestdaylong;PWD=bestdaylong')

  16. cursorCourseMany =connCourseMany.cursor()

  17. cursorCourseMap =connCourseMap.cursor()


  18. cursorCourseMap =connCourseMap.cursor(as_dict=False)

  19. print("開始時間:"+str(datetime.now()))
  20. #取得入學年學號
  21. systemYear=106
  22. for systemYear in range(105,109):
  23.     strSQL="select rtrim(學號),入學年,日夜代碼,學制代碼,院所代碼 from [MUSTDB].[ming].[dbo].[map_student_info] where 入學年='{0}'  and ([學制代碼]='B' or [學制代碼]='N' )".format(systemYear)

  24.     cursorCourseMap.execute(strSQL)

  25.     rowCourseMap=cursorCourseMap.fetchall()

  26.     std_list=[]
  27.     dict_std_basic={}
  28.     for item in rowCourseMap:
  29.         std_list.append(item[0])
  30.         dict_std_basic[item[0]]=(item[1],item[2],item[3],item[4])

  31.     #print(std_list)

  32.     #取得SystemID
  33.     strSQL="select  systemYear,mustDivi,mustColg,mustCollege,systemID from [dbo].[systemCollege] ".format(systemYear)

  34.     cursorCourseMap.execute(strSQL)

  35.     rowCourseMap=cursorCourseMap.fetchall()

  36.     dict_systemID={}
  37.     for item in rowCourseMap:
  38.         dict_systemID[(item[0],item[1],item[2],item[3])]=item[4]

  39.     #取得權重
  40.     strSQL="select systemId,mustBookKind,weightNumber from [dbo].[weightBasic] "

  41.     cursorCourseMap.execute(strSQL)

  42.     rowCourseMap=cursorCourseMap.fetchall()

  43.     dict_systemWeightNumber={}
  44.     for item in rowCourseMap:
  45.         dict_systemWeightNumber[(item[0],item[1])]=item[2]


  46.     #取得分數及距
  47.     strSQL="select range10,range20,range30,range40,range50,range60,range70,range80,range90,range100 from  [dbo].[rangeBasic] where systemYear='{0}'".format(systemYear)

  48.     cursorCourseMap.execute(strSQL)

  49.     rowCourseMap=cursorCourseMap.fetchone()

  50.     if rowCourseMap:
  51.         range10=rowCourseMap[0]
  52.         range20=rowCourseMap[1]
  53.         range30=rowCourseMap[2]
  54.         range40=rowCourseMap[3]
  55.         range50=rowCourseMap[4]
  56.         range60=rowCourseMap[5]
  57.         range70=rowCourseMap[6]
  58.         range80=rowCourseMap[7]
  59.         range90=rowCourseMap[8]
  60.         range100=rowCourseMap[9]

  61.     #取得七大能力指標
  62.     strSQL="select qyb.qualityYearId,qualityName from [dbo].[qualityYearBasic] qyb inner join [dbo].[qualityBasic] qb on  qyb.qualityId=qb.qualityId where systemYear={0} and qyb.deleteRecord=0 order by qyb.qualityYearId asc".format(systemYear)

  63.     cursorCourseMap.execute(strSQL)

  64.     rowCourseMap=cursorCourseMap.fetchall()


  65.     qualityYear={}
  66.     showQualityYearId=['','','','','','','','']
  67.     i=1
  68.     for row in rowCourseMap:
  69.         qualityYearId=row[0]
  70.         qualityName=row[1]
  71.         qualityYear[qualityYearId]=qualityName
  72.         showQualityYearId=qualityYearId
  73.         i=i+1

  74.     std_nos=["B08250008"]


  75.     run_sql=[]
  76.     del_sql=[]
  77.     #std_list=['B07082103','B06080201']

  78.     n=0
  79.     print(len(std_list))
  80.     for std_no in std_list:
  81.         n=n+1
  82.         #print(n)
  83.         showTotal=[0,0,0,0,0,0,0,0]
  84.         topTotal=[0,0,0,0,0,0,0,0]
  85.         realTotal=[0,0,0,0,0,0,0,0]


  86.         systemYear=dict_std_basic[std_no][0]
  87.         mustDivi=dict_std_basic[std_no][1]
  88.         mustColg=dict_std_basic[std_no][2]
  89.         mustCollege=dict_std_basic[std_no][3]
  90.         systemID=dict_systemID[(systemYear,mustDivi,mustColg,mustCollege)]
  91.         weightNumberBasic=dict_systemWeightNumber.get((systemID,'基礎通識'),0)
  92.         weightNumberKind=dict_systemWeightNumber.get((systemID,'分類通識'),0)


  93.         #取得學生
  94.         strSQL="execute sp_coursemapstdold {0},'{1}'".format(systemYear,std_no)

  95.         cursorCourseMap.execute(strSQL)

  96.         rowCourseMap=cursorCourseMap.fetchall()
  97.         for row in rowCourseMap:
  98.             mustBook=row[11]
  99.             mustBookName=row[12]
  100.             mustScore=int(row[13])
  101.             kernelName=row[4]

  102.             #單一科七項能力加總
  103.             score_total=0
  104.             for i in range(1,8):
  105.                 score_total+=row[13+i]

  106.             #計算所得比例

  107.             for i in range(1,8):
  108.                 data=row[13+i]  #所佔權重
  109.                 if mustScore==0:
  110.                     showScore=0
  111.                 elif mustScore<=10:
  112.                     showScore=10
  113.                 elif mustScore<=20:
  114.                     showScore=20
  115.                 elif mustScore<=30:
  116.                     showScore=30
  117.                 elif mustScore<=40:
  118.                     showScore=40
  119.                 elif mustScore<=50:
  120.                     showScore=50
  121.                 elif mustScore<=60:
  122.                     showScore=60
  123.                 elif mustScore<=70:
  124.                     showScore=70
  125.                 elif mustScore<=80:
  126.                     showScore=80
  127.                 elif mustScore<=90:
  128.                     showScore=90
  129.                 elif mustScore<=100:
  130.                     showScore=100

  131.                 if((weightNumberBasic+weightNumberKind)!=0):
  132.                     if(kernelName=="基礎通識"):
  133.                         showScore=showScore*(weightNumberBasic/(weightNumberBasic+weightNumberKind))
  134.                         topScore=100*(weightNumberBasic/(weightNumberBasic+weightNumberKind))
  135.                     else:
  136.                         showScore=showScore*(weightNumberKind/(weightNumberBasic+weightNumberKind))
  137.                         topScore=100*(weightNumberKind/(weightNumberBasic+weightNumberKind))

  138.                     if score_total!=0:
  139.                         showScore=showScore*(data/score_total)
  140.                         topScore=topScore*(data/score_total)

  141.                         showScore=round(showScore,1)
  142.                         topScore=round(topScore,1)
  143.                     else:
  144.                         showScore=0
  145.                         topScore=0
  146.                 else:
  147.                     showScore=0
  148.                     topScore=0

  149.                 showTotal=showTotal+showScore
  150.                 topTotal=topTotal+topScore

  151.                 #realTotal=round(showTotal/topTotal,2)*100
  152.                 #print(topTotal)


  153.         for i in range(1,8):

  154.             if topTotal>0:
  155.                 realTotal=round(showTotal/topTotal,2)*100
  156.             else:
  157.                 realTotal=0
  158.             #print(std_no,showQualityYearId,qualityYear[showQualityYearId],showTotal,topTotal,realTotal)
  159.             score=showTotal
  160.             if score>100:
  161.                 score=100

  162.             strSQL=(std_no,systemYear,showQualityYearId,qualityYear[showQualityYearId],showTotal,topTotal,score)
  163.             run_sql.append(strSQL)

  164.             #print(strSQL)
  165.             #cursorCourseMap.execute(strSQL)
  166.             #connCourseMap.commit()            

  167.         del_sql.append((std_no,))
  168.     print("結束時間:"+str(datetime.now()))   
  169.     #print(run_sql)

  170.     #print(del_sql)
  171.     #print(type(del_sql))
  172.     strSQL="delete from mustStdBookBasic where std_no=? "
  173.     cursorCourseMany.fast_executemany = True
  174.     cursorCourseMany.executemany(strSQL,del_sql)
  175.     cursorCourseMany.commit()

  176.     s=datetime.now()
  177.     strSQL="Insert into mustStdBookBasic (std_no,enter_year,quality_year_id,quality_name,get_score,base_score,score) values(?,?,?,?,?,?,?)"

  178.     cursorCourseMany.fast_executemany = True
  179.     cursorCourseMany.executemany(strSQL,run_sql)
  180.     cursorCourseMany.commit()


  181.     print("開始時間:",s)
  182.     print("結束時間:",str(datetime.now()))      



複製代碼

回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)

GMT+8, 2021-4-11 03:07 , Processed in 0.102640 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表