0

首先对不起我的英语:(我正在制作一个从moodle访问信息的Python程序。但是访问服务器的sql非常慢,我需要优化sql,如下所示:

    try:
        query1 = "SELECT id FROM mdl_user WHERE username= ('%s')" % (self.searchuser2)
        cursor.execute(query1)
        linhas = cursor.fetchall()
        for row in linhas:
            self.userid = row[0]
        # Pegando enrol_id do curso
        query2 = "SELECT id FROM mdl_enrol WHERE courseid = %s AND enrol = 'manual'" % (self.rowidcourse)
        cursor.execute(query2)
        linhas = cursor.fetchall()
        for row in linhas:
            self.enrol_courseid = row[0]

        # Inserindo o aluno e curso em mdl_user_enrolments
        query3 = "INSERT INTO mdl_user_enrolments (status, enrolid, userid, timestart, timeend, timecreated, timemodified) VALUES(0, %s, %s, 1, 0, 1, 1)" % (
            self.enrol_courseid, self.userid)
        cursor.execute(query3)
        mariadb_connection.commit()

        # Pegando contex_id do curso e aluno
        query4 = "SELECT id FROM mdl_context WHERE instanceid=%s AND contextlevel=50" % (self.rowidcourse)
        cursor.execute(query4)
        linhas = cursor.fetchall()
        for row in linhas:
            self.contexid = row[0]
        # Inserindo aluno no curso
        query5 = "INSERT INTO mdl_role_assignments (roleid,contextid,userid,timemodified) VALUES (5,%s,%s,2000)" \
                 % (self.contexid, self.userid)
        cursor.execute(query5)
        mariadb_connection.commit()
        closedb()
        tkinter.messagebox.showinfo("Muito bem!", "Aluno cadastrado com sucesso.", parent=self.register1)
4

1 回答 1

0

看起来您正在将所有用户注册到所有课程中?这可能是很多数据。

您还从mdl_enrol每个循环中获取所有记录mdl_user

并且enrolid不一样courseidEnrolidmdl_enrol.

该代码也不会检查数据是否已经存在。

此外,Moodle 有很多不会被此代码激活的触发器。

看看站点管理员 > 用户 > 上传用户可能会更好

https://docs.moodle.org/39/en/Upload_users#Enrolment_fields

这将允许您将用户注册到多个课程中。

于 2020-08-11T15:27:51.723 回答