2017-08-28 34 views
0

我有底層的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是具有從其它先前查詢匹配的數據的對象。

我想看看這是否可能; (select * from sql1)部分。

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

或者我必須表達一切,而不是使用(選擇*)?

什麼是最佳實踐?

+0

您不寫'INSERT INTO table1(col,col,...)SELECT(col,col,...)FROM table2'沒有單詞「values」。 – khelwood

回答

2

您可以這樣做,但是您應該在模式更改的情況下指定列。

1

只需確認您正在嘗試運行選擇查詢並將其輸出插入到插入查詢。如果是這種情況,這看起來很好。

1

是,你可以,但你應該這樣做

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)看與什麼發生選擇並查看每列的鍵

+0

如何修改頂部列出的'Key','Key2','Key3'等區域? –

+0

評論所有for語句並在for函數之前輸入print(all [0]),並告訴我 –

+0

應該返回一個字典,所以您必須在所有[i] ['key']中引用該值的鍵值 –

相關問題