SQL вставить, если существует и вставить, если нет

avatar
Дамир Саматов
8 апреля 2018 в 10:27
49
1
0

Если у меня уже есть данные в моей таблице «current_schedule» с заданной датой, мне нужно получить этот «id» и ВСТАВИТЬ в другую таблицу «statistic» с этим «id». Если нет, мне нужно создать его, а затем ВСТАВИТЬ с созданным «id». Я почти сделал это :

   cursor.execute("SELECT id FROM current_schedule WHERE date = '{}'".format(lessondate))
    idforme = cursor.fetchone()
    if cursor.fetchone():
        idforme = idforme[0]
        if flag == str_to_bool('true'):
            cursor.execute("INSERT INTO statistic (id_student, id_current_schedule,here) \
                    VALUES ('{}','{}',1)".format(id_student,idforme))
        if flag == str_to_bool('false'):
            cursor.execute("INSERT INTO statistic (id_student, id_current_schedule,here) \
                    VALUES ('{}','{}',0)".format(id_student,idforme))
    else:
        cursor.execute("INSERT INTO current_schedule (id_schedule, date) VALUES ('{}','{}')".format(id_schedule,lessondate))
        mysql.connection.commit()
        if flag == str_to_bool('true'):
            cursor.execute("INSERT INTO statistic (id_student, id_current_schedule,here) \
                    VALUES ('{}',LAST_INSERT_ID(),1)".format(id_student))
        if flag == str_to_bool('false'):
            cursor.execute("INSERT INTO statistic (id_student, id_current_schedule,here) \
                    VALUES ('{}',LAST_INSERT_ID(),0)".format(id_student))
    mysql.connection.commit()

Но проблема в том, что он дважды создает новые данные в 'current_schedule' и только после этого начинает вставлять данные с уже созданным 'id' (первый) в 'statistic'.

Источник
Nick
8 апреля 2018 в 10:37
0

Вы уверены, что flag всегда бывает 'true' или 'false'? Не могли бы вы попробовать поставить else вместо if flag == str_to_bool('false'): и посмотреть, не создастся ли что-нибудь в statistic с первой попытки?

Дамир Саматов
8 апреля 2018 в 10:47
0

@Nick Я уже решил это, добавив сначала условие if 'idforme' вместо cursor.fetchone

Ответы (1)

avatar
Ctznkane525
8 апреля 2018 в 10:48
0

Как насчет того, чтобы попробовать это, так как это в основном тот же запрос:

else:
    cursor.execute("INSERT INTO current_schedule (id_schedule, date) VALUES ('{}','{}')".format(id_schedule,lessondate))
    mysql.connection.commit()
    flagNum = 0 if flag == str_to_bool('false') else 1
    cursor.execute("INSERT INTO statistic (id_student, id_current_schedule,here) \
                VALUES ('{}',LAST_INSERT_ID(),{})".format(id_student, flagNum))
    mysql.connection.commit()