I am using mysql connector.Python 1.0.9 downloaded from MySQL site.
I have a sample table here
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id
Looking at the MySQL docs
If multi is set to True, execute() is able to execute multiple statements specified in the operation string. It returns an iterator that enables processing the result of each statement. However, using parameters does not work well in this case, and it is usually a good idea to execute each statement on its own.
so setting multi=True returns an iterator and if you just want to loop through each statement, the other solution offered works well:
for result in cursor.execute(SQL, multi=True):
pass
You need to have somekind of commit
cnx.commit()
MySQL reference
Another option is to use executemany, as follows:
sql=('insert into articulos (descripcion, precio) values(%s,%s)')
data=[('naranjas',22), ("pomelos", 29), ("frutillas", 130)]
cursor.executemany(sql,data)
At-last after a long research on docs and help. I could able to solve the issue.
Using a for
loop at cursor.execute
with multi=True
worked. I don't know why we need to loop through.
for result in cursor.execute(SQL, multi=True):
pass
Without loop just cursor.execute(SQL, multi=True)
did not do any changes in the database.
import mysql.connector
cnx = mysql.connector.connect(user='scott', database='test')
cursor = cnx.cursor()
SQL = '''
update my_table
set
LAY = 'P6682'
, BLK = 'P6682'
, ANI = 'P6682'
where
Shot = 'SH01';
update my_table
set
LAY = '1863'
, BLK = '1863'
, ANI = '1863'
where
Shot = 'SH02'
'''
for result in cursor.execute(SQL, multi=True):
pass
cnx.commit()
cur.close()
cnx.close()
cnx.disconnect()