Python 执行USE语句会产生;您的SQL语法中有一个错误";

Python 执行USE语句会产生;您的SQL语法中有一个错误";,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我有一个奇怪的逃跑问题。USE语句并不像我期望的那样工作。以下是我尝试过的三种说法,但只有最后一种有效: engine=create_engine("mysql+pymysql://l:pw@myserver") engine.execute("use :db", db='mydb') # fails engine.execute("use 'mydb'") # fails engine.execute("use `mydb`") # works fine

我有一个奇怪的逃跑问题。USE语句并不像我期望的那样工作。以下是我尝试过的三种说法,但只有最后一种有效:

engine=create_engine("mysql+pymysql://l:pw@myserver")
engine.execute("use :db", db='mydb')  # fails
engine.execute("use 'mydb'")          # fails
engine.execute("use `mydb`")          # works fine
失败的语句引发异常“您的SQL语法有错误…”。我与strace核对了通过网络发送的查询,它是“使用‘mydb’”。但是从MySQL cli执行的这个查询工作得很好。为什么它在炼金术内部不起作用


PS我尝试使用“setSQL\u mode=ANSI\u QUOTES”并将SQLAlchemy和PyMySQL更新为最新版本。还尝试了mysqlclient驱动程序,运气不好。

您无法使用占位符传递标识符(表名、列名等)。看起来是这样的。有没有更好的方法来更改数据库?除了“使用%s”%db之外,我找不到任何数据库,但这是不安全的。我看到的唯一选择是手动调用sqlalchemy的函数来转义数据。如果您将数据库名称的列表列为白名单,这并不是不安全的。