आप लिखित रूप में अपनी संग्रहीत प्रक्रिया के साथ ऐसा नहीं कर सकते हैं। यह एक समय में केवल एक पंक्ति सम्मिलित करेगा, इसलिए सम्मिलित करने के लिए 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