我编写的代码获取某个专业的学生列表,并分配该年每个专业招收的学生人数。
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]发布于 2017-10-31 10:18:57
考虑使用关键字作为查询的分组值的字典,CMGD、CMSD、ITSS……值将是聚合计数。下面运行字典理解,一个用于集中,另一个用于游标行读取上的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']
# ...https://stackoverflow.com/questions/47023243
复制相似问题