sql >> Databáze >  >> RDS >> Mysql

Jak mohu vložit seznam vrácený z dotazu pyodbc mssql do mysql prostřednictvím uložené procedury pomocí pymysql

Nemůžete to udělat s uloženou procedurou, jak je napsána. Bude vkládat pouze jeden řádek najednou, takže pro vložení n řádků, které byste museli nazvat n krát.

Také, pokud vím, nemůžete upravit uloženou proceduru tak, aby vložila n řádků bez použití dočasné tabulky nebo jiného řešení, protože MySQL nepodporuje parametry s hodnotou tabulky pro uložené procedury.

Můžete však vložit více řádků najednou, pokud použijete běžný příkaz INSERT a .executemany . pymysql sbalí vložky do jedné nebo více víceřádkových vložek

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)

Výše uvedený kód vytváří v MySQL general_log

následující
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  

Všimněte si, že pymysql nemůže sdružovat volání uložené procedury stejným způsobem, takže pokud byste použili

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

namísto běžného INSERTu by pak obecný_log obsahoval

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. Nejlepší způsob, jak přenést schéma SQL Server DB do MySQL

  2. Úhlová smyčka se neaktualizuje

  3. Jak zobrazit chyby v sqlplus

  4. Moje oblíbené PostgreSQL dotazy a proč na nich záleží