我正在做一个项目,人们通过提供他们的信息(教育、学习领域、获得的高等学位等)来获得分数。我正在使用sqlite3和Python2.7
为了做到这一点,我有一个数据库,其中每个城市和省都列出了人民教育的最高学位的百分比。我为每个省准备了一张桌子:
数据库:
表:省1
cities| no certificate| high school diploma| Apprenticeship| bachelor| etc..
city1 : 5 | 15 | 8 | 20 | ...
city2 : 15 | 12 | 35 | 10 | ...
city3 : 1 | 35 | 3 | 8 | ...
然后我有我的功能。在这本书中,我想做的是计算受教育程度较低和平等的人/受教育程度较高的人的百分比。你知道吗
示例:如果user1来自city2,并且拥有学徒学位,则结果为62/38=1.63
这是我到目前为止得到的,但正如你所看到的,这是一个巨大的失败:
def edu_score(education, fos, province, city):
edu_lvl = ['No_certificate', 'high_school_diploma', 'Apprenticeship', 'CEGEP', 'Bachelor Diploma', 'Master Diploma', 'Doctorate']
score = 0
crsr.execute("SELECT (SUM([edu_lvl.index(ed):: -1]) / (SUM ([edu_lvl.index(ed)::])) FROM province_1 WHERE cities = city")
score = crsr.fetchone()
print score
我怎么计算?我该怎么做才能让用户的输入不被当作字符串,而在db中返回相同的字符串值呢?你知道吗
非常感谢你,我希望我说得够清楚。你知道吗
[我的回答]
因此,我遇到的第一个问题是,我通过edu\u score(education)将另一个字符串添加到SELECT语句中,它只返回在DB中找到的字符串。另一个问题是,它并不是根据用户的最高教育水平,对必要的行求和。你知道吗
答案是这样的:将SELECT字符串分段,不要使用SUM,因为它是对列的求和,而不是对行的求和。您只需要创建一个包含所有要添加的数据的字符串,即:SELECT(a+B+C)FROM table WHERE?,[城市,]。你知道吗
我创建这个变量是因为在函数中它将返回“None”
city\ u result是将放入要计数的SELECT语句中的内容
唯一要记住的是SUM是for column,因此如果您只需要某一行,只需将要添加的数据放在SELECT语句中,并且小心地将string放在SELECT字符串中(因为它返回相同的字符串)。你知道吗
首先,您应该将表合并到一个表中,并添加一个名为provinces的列。这是有充分理由的。您不希望将任何用户输入字段作为表名调用,因为您不能轻松地将其标记化(避免sql注入)。你知道吗
其次,将python代码与SQL语句合并,这样就永远不会起作用。你知道吗
你需要的是这样的东西:
更新时间: 要处理评分,应该使用python,而不是SQL。你知道吗
相关问题 更多 >
编程相关推荐