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

0

Если у меня уже есть данные в моей таблице "current_schedule" с заданной датой, мне нужно получить этот "id" и "INSERT" в другую таблицу "статистика" с этим "id". Если у меня нет, мне нужно создать его, а затем INSERT с созданным "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" (первым) в "статистику".

  • 0
    Вы уверены, что flag только когда 'true' либо 'true' или 'false' ? Не могли бы вы попробовать поставить else вместо if flag == str_to_bool('false'): и посмотреть, будет ли что-то создано в statistic с первой попытки?
  • 0
    @ Ник Я уже решил ее, добавив сначала условие ifforme вместо cursor.fetchone.
Теги:
mysql-python

1 ответ

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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню