Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana saya bisa memasukkan daftar yang dikembalikan dari kueri mssql pyodbc ke mysql melalui prosedur tersimpan menggunakan pymysql

Anda tidak dapat melakukannya dengan prosedur tersimpan seperti yang tertulis. Itu hanya akan menyisipkan satu baris pada satu waktu, jadi untuk menyisipkan n baris Anda harus menyebutnya n kali.

Juga, sejauh yang saya tahu Anda tidak dapat mengubah prosedur tersimpan untuk menyisipkan n baris tanpa menggunakan tabel sementara atau solusi lain karena MySQL tidak mendukung parameter bernilai tabel ke prosedur tersimpan.

Namun, Anda dapat menyisipkan beberapa baris sekaligus jika Anda menggunakan pernyataan INSERT biasa dan .executemany . pymysql akan menggabungkan sisipan menjadi satu atau lebih sisipan multi-baris

mssql_crsr = mssql_cnxn.cursor()
mssql_stmt = """\
SELECT 1 AS id, N'Alfa' AS txt
UNION ALL
SELECT 2 AS id, N'Bravo' AS txt
UNION ALL
SELECT 3 AS id, N'Charlie' AS txt
"""
mssql_crsr.execute(mssql_stmt)
mssql_rows = []
while True:
    row = mssql_crsr.fetchone()
    if row:
        mssql_rows.append(tuple(row))
    else:
        break

mysql_cnxn = pymysql.connect(host='localhost', port=3307,
                             user='root', password='_whatever_',
                             db='mydb', autocommit=True)
mysql_crsr = mysql_cnxn.cursor()
mysql_stmt = "INSERT INTO stuff (id, txt) VALUES (%s, %s)"
mysql_crsr.executemany(mysql_stmt, mssql_rows)

Kode di atas menghasilkan yang berikut di MySQL general_log

190430 10:00:53     4 Connect   [email protected] on mydb
            4 Query INSERT INTO stuff (id, txt) VALUES (1, 'Alfa'),(2, 'Bravo'),(3, 'Charlie')
            4 Quit  

Perhatikan bahwa pymysql tidak dapat menggabungkan panggilan ke prosedur tersimpan dengan cara yang sama, jadi jika Anda ingin menggunakan

mysql_stmt = "CALL stuff_one(%s, %s)"

alih-alih INSERT biasa maka general_log akan berisi

190430  9:47:10     3 Connect   [email protected] on mydb
            3 Query CALL stuff_one(1, 'Alfa')
            3 Query CALL stuff_one(2, 'Bravo')
            3 Query CALL stuff_one(3, 'Charlie')
            3 Quit  



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Koneksi terputus ke server MySQL saat 'membaca paket komunikasi awal', kesalahan sistem:0

  2. Nilai input yang tersusun menyisipkan catatan kosong di mysql

  3. Basis Data:Dapatkah saya memiliki atribut yang dapat dibatalkan dalam basis data bentuk normal ketiga?

  4. KIRI GABUNG hanya baris pertama

  5. Mainkan 2.4 - Slick 3.0.0 - HAPUS tidak berfungsi