我可以远程访问MySQL服务器,并且能够使用工作台正确执行SQL以获得所需的结果.然而,当我使用SQL在同一台机器上执行相同的SQL时,我会得到一个错误:

ObjectNotExecutableError    

下面是我的代码:

from sqlalchemy import create_engine
db_user = os.environ['USER']
db_password = os.environ['PWD']
db_host = os.environ['HOST']
engine = create_engine(f"mysql+pymysql://{db_user}:{db_password}@{db_host}")

with engine.connect() as con:

  rs = con.execute('SELECT schema_name FROM information_schema.schemata;')
  for row in rs:
    print(row)

有什么 idea 吗?

推荐答案

你必须像con.execute(text("SELECT schema_name FROM information_schema.schemata;"))一样使用sqlalchemy.text

完整代码

from sqlalchemy import create_engine, text

db_user = os.environ["USER"]
db_password = os.environ["PWD"]
db_host = os.environ["HOST"]
engine = create_engine(f"mysql+pymysql://{db_user}:{db_password}@{db_host}")

with engine.connect() as con:
    rs = con.execute(text("SELECT schema_name FROM information_schema.schemata;"))
    for row in rs:
        print(row)

Mysql相关问答推荐

为什么我的带有索引字段和非索引字段的 Select 有时需要很长时间

从insert语句获取新生成的虚拟UUID

使用不同的 where 列进行子 Select

根据时间戳分组删除

SQL 请求:REPLACE 和通配符 %.如何做正确的事?

如何从mysql中的不可用日期范围获取可用日期范围?

MYSQL 8.0 - 从 INFORMATION_SCHEMA.COLUMNS 获取表列重新调整其他不相关的列

判断一列中的多个值并返回值 1 或 0

提取 MySQL 5.7 连续值的差异

正则表达式模式相当于 mysql 中的 %word%

MySQL在定义表的位置后抛出错误

限制正则​​表达式中多字符通配符的范围

Select 多列但仅按 1 列分组

MySql查询无结果

如何使主键从 1000 开始?

如何在 MySQL 中为用户设置默认架构

在 MySQL Workbench EER 图中的多个列上创建唯一约束

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

如何使用 XML_LOAD() 将 XML 文件导入 MySQL 数据库表;功能

如何将本地托管的 MySQL 数据库与 docker 容器连接