分配SQL结果的更好选择

时间:2017-10-30 19:58:33

标签: sql python-3.x

我写的代码抓住了一个专业的学生名单,并指定当年为每个专业注册的学生人数。

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]

1 个答案:

答案 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']  
    # ...