Mysql
 sql >> база данни >  >> RDS >> Mysql

Как мога да вмъкна списък, върнат от pyodbc mssql заявка в mysql чрез съхранена процедура, използвайки pymysql

Не можете да направите това с вашата съхранена процедура, както е написано. Той ще вмъква само един ред наведнъж, така че да се вмъкне n редове ще трябва да го наречете n пъти.

Освен това, доколкото знам, не можете да промените съхранената процедура, за да вмъкнете n редове без използване на временна таблица или някакво друго решение, тъй като MySQL не поддържа стойностни на таблица параметри към съхранените процедури.

Можете обаче да вмъкнете няколко реда наведнъж, ако използвате обикновен израз INSERT и .executemany . pymysql ще обедини вмъкванията в една или повече многоредови вмъквания

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)

Горният код произвежда следното в 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  

Имайте предвид, че pymysql не може да обединява извиквания към съхранена процедура по същия начин, така че ако трябва да използвате

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

вместо обикновен INSERT, тогава general_log ще съдържа

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. Проектиране на таблицата на обект-атрибут-стойност

  2. MySQL съхранява Floats

  3. MySQL:Актуализирайте заявката с помощта на If else

  4. Мога ли да направя динамичен .htaccess файл?

  5. Как се подигравате с MySQL (без ORM) в Node.js?