python mysql连接器多语句

python mysql连接器多语句,python,mysql,Python,Mysql,我试图让这个简单的语句列表不成功地工作。更令人困惑的是,前四条语句有效,而最后一条语句即使在我注释掉其余语句时也不起作用!最终语句得到以下响应: mysql.connector.errors.InterfaceError:在执行多个语句时使用multi=True codigo_postal的数据类型为int(11),而latitud和longitud是varchar 我尝试过创建新连接、新游标、新连接和游标。我已经尝试添加multi=“True”并将语句组合到一个操作中。我尝试将multi=“T

我试图让这个简单的语句列表不成功地工作。更令人困惑的是,前四条语句有效,而最后一条语句即使在我注释掉其余语句时也不起作用!最终语句得到以下响应:

mysql.connector.errors.InterfaceError:在执行多个语句时使用multi=True

codigo_postal的数据类型为int(11),而latitud和longitud是varchar

我尝试过创建新连接、新游标、新连接和游标。我已经尝试添加multi=“True”并将语句组合到一个操作中。我尝试将multi=“True”作为第二个和第三个参数添加到每个cur.execute()。我已经在Workbench中运行了该语句,以确保该语句有效且有效


但是在这里没有成功…

在执行DML(数据操作语言)命令后,可以使用
commit
。另外,使用
multi=True
可以更方便地完成此作业,但您需要运行由
execute
创建的生成器

一般方法:

import mysql.connector

connection = mysql.connector.connect(user="REMOVED", 
                                     password="REMOVED", 
                                     host="REMOVED", 
                                     database="REMOVED")

cur = connection.cursor()

# Latitude - remove letter A
cur.execute("UPDATE tau._inm_exportados_test_csv SET latitud = REPLACE (latitud, 'a=','');")
print("Latitude change remove letter A - executed!")

# Longitude - remove letter A
cur.execute("UPDATE tau._inm_exportados_test_csv SET longitud = REPLACE (longitud, 'a=','');")
print("Longitude change remove letter A - executed!")

# Latitude - MODIFY COLUMN
cur.execute("ALTER TABLE tau._inm_exportados_test_csv MODIFY COLUMN latitud DECIMAL(10,6);")
print("Latitude - MODIFY COLUMN - executed!")

# Longitude - MODIFY COLUMN
cur.execute("ALTER TABLE tau._inm_exportados_test_csv MODIFY COLUMN longitud DECIMAL(10,6);")
print("Longitude - MODIFY COLUMN - executed!")




# Post Code data type change
cur.execute("ALTER TABLE tau._inm_exportados_test_csv MODIFY COLUMN codigo_postal varchar(255);)")
print("Post Code data type change to varchar(255) - executed!")

connection.commit()
cur.close()
connection.close()
使用
multi=True

cur = connection.cursor()

def alter(state,msg):
    try:
        cur.execute(state)
        connection.commit()     
    except Exception as e:
        connection.rollback()
        raise e
    print(msg)

alter("ALTER TABLE address MODIFY COLUMN id int(15);","done")
alter("ALTER TABLE address MODIFY COLUMN email varchar(35);","done")
alter("ALTER TABLE address MODIFY COLUMN person_id int(35);","done")

它的multi=True不是multi=“True”这是我描述中的一个错误。我确实写了它的multi=True而不是multi=“True”。我刚刚注意到,事实上有一个拼写错误——在最后的语句末尾有一个不需要的括号!我刚刚重新运行了代码,它正在运行。谢谢你的意见。太好了,我刚刚实现了它
cur = connection.cursor()

def alter(state,msg):
    result = cur.execute(state,multi=True)
    result.send(None)
    print(msg,result)
try:
    alter("ALTER TABLE address MODIFY COLUMN id int(45)","done")
    alter("ALTER TABLE address MODIFY COLUMN email varchar(25)","done")
    alter("ALTER TABLE address MODIFY COLUMN person_id int(25);","done")
    connection.commit()
except Exception as e:
    connection.rollback()
    raise e