sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag infoga en lista som returneras från pyodbc mssql-frågan i mysql genom lagrad procedur med pymysql

Du kan inte göra det med din lagrade procedur som skriven. Den kommer bara att infoga en rad i taget, så för att infoga n rader måste du kalla det n gånger.

Så vitt jag vet kan du inte ändra den lagrade proceduren för att infoga n rader utan att använda en temporär tabell eller någon annan lösning eftersom MySQL inte stöder tabellvärdade parametrar till lagrade procedurer.

Du kan dock infoga flera rader samtidigt om du använder en vanlig INSERT-sats och .executemany . pymysql kommer att bunta inläggen till en eller flera flerradsinfogningar

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)

Ovanstående kod producerar följande i 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  

Observera att pymysql inte kan bunta anrop till en lagrad procedur på samma sätt, så om du skulle använda

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

istället för en vanlig INSERT så skulle general_log innehålla

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. java.sql.SQLException:Kolumnantal matchar inte värderäkning vid rad 1 fel

  2. Skriv ut rankning från summa i PHP &MySQL i 1,1,3,4, etc Order

  3. Provisioning MySQL/MariaDB Vault Database Secrets Engine med Terraform

  4. Hur man använder förberedda satser i frågor med en IN-sats i PHP