Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để tôi có thể chèn một danh sách được trả về từ truy vấn pyodbc mssql vào mysql thông qua thủ tục được lưu trữ bằng cách sử dụng pymysql

Bạn không thể làm điều đó với thủ tục được lưu trữ của bạn như đã viết. Nó sẽ chỉ chèn một hàng tại một thời điểm, vì vậy, để chèn n hàng bạn sẽ phải gọi nó là n lần.

Ngoài ra, theo như tôi biết, bạn không thể sửa đổi thủ tục đã lưu trữ để chèn n hàng mà không sử dụng bảng tạm thời hoặc một số giải pháp khác vì MySQL không hỗ trợ các tham số giá trị bảng cho các thủ tục được lưu trữ.

Tuy nhiên, bạn có thể chèn nhiều hàng cùng một lúc nếu bạn sử dụng câu lệnh INSERT thông thường và .executemany . pymysql sẽ nhóm các chèn thành một hoặc nhiều chèn nhiều hàng

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)

Đoạn mã trên tạo ra đoạn mã sau trong 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  

Lưu ý rằng pymysql không thể nhóm các lệnh gọi vào một thủ tục được lưu trữ theo cùng một cách, vì vậy nếu bạn đang sử dụng

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

thay vì INSERT thông thường thì general_log sẽ chứa

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. Khoảng trống và đảo trên 2 cột - nếu cột A liên tiếp và cột B giống hệt nhau

  2. MySQL - Tính chênh lệch thời gian thực giữa hai ngày-giờ trong khi loại trừ thời gian nghỉ?

  3. Quyền truy cập root MySQL từ tất cả các máy chủ

  4. Làm cách nào để sử dụng giá trị chuỗi / cột làm hằng số khoảng ngày của mysql (NGÀY, THÁNG ...)?

  5. Di chuyển cơ sở dữ liệu Ruby on Rails không tạo khóa ngoại trong bảng MySQL