使用 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}
)
...
我可以用 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}
)
...