Update database with multiple SQL Statments

后端 未结 4 1334
终归单人心
终归单人心 2021-02-06 06:48

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          


        
相关标签:
4条回答
  • 2021-02-06 07:27

    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
    
    0 讨论(0)
  • 2021-02-06 07:28

    You need to have somekind of commit

    cnx.commit()
    

    MySQL reference

    0 讨论(0)
  • 2021-02-06 07:28

    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) 
    
    0 讨论(0)
  • 2021-02-06 07:37

    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()
    
    0 讨论(0)
提交回复
热议问题