2017-08-28 28 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) 

(Select *)を使用するのではなく、すべてを表現する必要がありますか?

ベストプラクティスとは何ですか?

+0

"values"という単語を使わずに、INSERT INTO table1(col、col、...)SELECT(col、col、...)FROM table2'を書きません。 – 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']の値の鍵を参照する必要があります。 –

関連する問題