使用 sqlalchemy 同时执行多个 sql 语句

execute many sql statements at the same time with sqlalchemy

我可以用 sqlalchemy.

一条一条地执行 MySQL 条语句
from sqlalchemy.sql import text

ipass = "xxxx"
mysql_ip = "xxxx"

link = create_engine("mysql+pymysql://root:{}@{}:3306/?charset=utf8".format(ipass,mysql_ip))

sql1 = text("use dbname;")
sql2 = text("truncate table table_name;")
sql3 = text("alter table table_name auto_increment=1;")

link.execute(sql1)
link.execute(sql2)
link.execute(sql3)

这很好用。我希望在一个执行命令中将所有三个 mysql 语句 运行:

sql = text("""
use dbname;
truncate table table_name;
alter table table_name auto_increment=1;
""")
result = link.execute(sql)

错误信息returns:

You have an error in your SQL syntax...

sqlalchemy 中无法批处理多个 SQL 语句吗?

如何在create_engine语句中添加client_flag=CLIENT.MULTI_STATEMENTS呢?

我前段时间遇到了同样的问题,它在驱动程序级别(pymysql),你需要在 create_engine 调用中添加标志 client_flag=CLIENT.MULTI_STATEMENTS,请参阅维护者的友好回答 https://github.com/PyMySQL/PyMySQL/issues/770

@scrapy,基于this code,你可以这样添加client_flag=CLIENT.MULTI_STATEMENTS标志:

from pymysql.constants import CLIENT
from sqlalchemy import create_engine

...

create_engine(
    f"mysql+pymysql://root:{ipass}@{mysql_ip}:3306/?charset=utf8",
    connect_args={"client_flag": CLIENT.MULTI_STATEMENTS}
)

...