我写的代码抓住了一个专业的学生名单,并指定当年为每个专业注册的学生人数。
Format of SQL TABLE: |count(int)|School(var)|Code(var)|Concentration(var)|
对于我来说,将sql结果值分配给python变量有什么更好的选择。现在,我使用IF语句测试硬编码值,看它们是否与名称匹配。如果是,我将第一列中的sql值分配给变量。这现在可以正常工作,因为我知道一切都在哪里......但是如果在我的表中添加或删除了行,它将无法工作。
有没有办法可以修改此代码,而不依赖于当前的行。
def grabmajorStartcc():
sql = ("SELECT count ([2015F Hist].Spridenspriden_ID) AS COUNT, [2015F Hist].SGBSTDNSGBSTDN_COLL_CODE_1 as School, [2015F Hist].SGBSTDNSGBSTDN_MAJR_CODE_1 as Code, [2015F Hist].SGBSTDNSGBSTDN_MAJR_CODE_CONC_1 as concentration "
"FROM [2015F Hist] "
"WHERE [2015F Hist].SGBSTDNSGBSTDN_COLL_CODE_1 IN ( 'CC', 'CO', 'LA', 'SB', 'SI', 'SM') "
"AND [2015F Hist].Cohort_desc = '2015 Fall First Time Trad' "
"GROUP BY [2015F Hist].SGBSTDNSGBSTDN_COLL_CODE_1, [2015F Hist].SGBSTDNSGBSTDN_MAJR_CODE_1, [2015F Hist].SGBSTDNSGBSTDN_MAJR_CODE_CONC_1 "
"ORDER BY [2015F Hist].SGBSTDNSGBSTDN_COLL_CODE_1, [2015F Hist].SGBSTDNSGBSTDN_MAJR_CODE_1")
cur.execute(sql)
result = cur.fetchall()
conn.commit()
if(result[0][3] == 'CMGD'):
grabmajorStartcc.cmgd = result[0][0]
if (result[1][3] == 'CMSD'):
grabmajorStartcc.cmsd = result[1][0]
if (result[2][3] == 'ITSS'):
grabmajorStartcc.itss = result[2][0]
if (result[3][3] == 'ITST'):
grabmajorStartcc.itst = result[3][0]
if (result[4][2] == 'MAAM'):
grabmajorStartcc.maam = result[4][0]
if (result[5][2] == 'MATE'):
grabmajorStartcc.mate = result[5][0]
if (result[6][2] == 'MATH'):
grabmajorStartcc.math = result[6][0]
答案 0 :(得分:0)
考虑使用词典,其中键是查询的分组值, CMGD , CMSD , ITSS ...和值将是聚合 Count 。下面运行字典理解,一个用于浓度,另一个用于 major_code 上的光标行提取。
def grabmajorStartcc():
sql = ...
cur.execute(sql)
result = cur.fetchall()
grabmajorStartcc.concentration = {row[3]:row[0] for row in result}
# grabmajorStartcc.concentration['CMGD']
# grabmajorStartcc.concentration['CMSD']
# ...
grabmajorStartcc.major_code = {row[2]:row[0] for row in result}
# grabmajorStartcc.major_code['MAAM']
# grabmajorStartcc.major_code['MATE']
# ...