Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę wstawić listę zwróconą z zapytania mssql pyodbc do mysql za pomocą procedury składowanej za pomocą pymysql

Nie możesz tego zrobić za pomocą procedury składowanej, jak napisano. Wstawi tylko jeden wiersz na raz, więc aby wstawić n wiersze, które trzeba by nazwać n razy.

Ponadto, o ile wiem, nie można zmodyfikować procedury składowanej, aby wstawić n wierszy bez użycia tabeli tymczasowej lub innego obejścia, ponieważ MySQL nie obsługuje parametrów o wartościach przechowywanych w tabeli.

Możesz jednak wstawić wiele wierszy naraz, jeśli używasz zwykłej instrukcji INSERT i .executemany . pymysql połączy wstawki w jedną lub więcej wielowierszowych wstawek

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)

Powyższy kod tworzy w 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  

Zwróć uwagę, że pymysql nie może łączyć wywołań procedury składowanej w ten sam sposób, więc jeśli miałbyś użyć

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

zamiast zwykłej INSERT wtedy general_log będzie zawierał

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. Czy ktoś zna znaczenie tego komunikatu o błędzie php?

  2. MySQL - Spraw, aby para wartości była unikalna

  3. jak ustawić domyślną wartość dla typu tekstu w mysql

  4. Jak Zend DB zarządza połączeniami z bazą danych

  5. Pytanie dotyczące wydajności:ON DUPLICATE KEY UPDATE vs UPDATE (MySQL)