У меня есть нижний MySql запрос (sql1).

sq1 = 'select course_id, creator_id, max(course_num) + 1, recordid 
  ' from Courses where recordid in' \
  ' (' + ','.join(map(str, RecordMatch1)) + ') group by recordid'
cursor.execute(sql1)

Кстати, RecordMatch1 - это объект, который имеет совпадающие данные из других предыдущих запросов.

Я пытаюсь понять, возможно ли это; ( выберите * из sql1 ).

sql2 = ' insert into Courses (course_id, creator_id, course_num, record_id) '\
   ' Values ( select * from sql1)'
cursor.execute(sql2)

Или я должен выразить все, а не с помощью (Выбрать *)?

Что такое лучшая практика?

0
Java 28 Авг 2017 в 20:22

3 ответа

Лучший ответ

Вы можете сделать это, но вы должны указать столбцы в случае изменения схемы.

2
jonathan.ihm 28 Авг 2017 в 17:28

Да, вы можете, но вы должны сделать что-то вроде

sql = "SELECT course_id, creator_id, course_num, record_id FROM Courses" 
all = cursor.fetchall()
for i in range(len(all))
    sql1 = "INSERT INTO Courses (course_id, creator_id, course_num, record_id) VALUES (%s, %s, %s, %s)"
    cursor.execute(sql1, (all[i]['Key'], all[i]['Key2'], all[i]['Key3'], all[i]['Key3']))

Вы можете изменить выбор, как хотите, помните, что возвращайте словарь, поэтому позаботьтесь о ключах, добавьте print(all), чтобы увидеть, что происходит с выбором, и посмотрите ключи каждого столбца.

1
Mauricio Cortazar 28 Авг 2017 в 17:59

Просто нужно подтвердить, что вы пытаетесь выполнить запрос select и вставить его вывод в запрос вставки. Если это так, то это кажется хорошим.

1
Daniyal Ahmed 28 Авг 2017 в 17:25