tianfu668 2023-02-24 18:58 采纳率: 80%
浏览 42
已结题

sqlalchemy 使用查询mysql出错

在网上查了用sqlalchemy查询mysql,都提供了比较简单的方法,但是使用就报错,请大拿指导


from sqlalchemy import create_engine
engine_ts = create_engine('mysql://user:pass@127.0.0.1:3306/test?charset=utf8&use_unicode=1')
sql = 'select * from stock_basic;
df = pd.read_sql_query(sql, engine_ts)

报错数据:

File "D:\pythonProject\Trade\mysql.py", line 17, in read_data
df = pd.read_sql_query(sql, engine_ts)
File "D:\Program Files\Python38\lib\site-packages\pandas\io\sql.py", line 397, in read_sql_query
return pandas_sql.read_query(
File "D:\Program Files\Python38\lib\site-packages\pandas\io\sql.py", line 1560, in read_query
result = self.execute(args)
File "D:\Program Files\Python38\lib\site-packages\pandas\io\sql.py", line 1405, in execute
return self.connectable.execution_options().execute(args, **kwargs)
AttributeError: 'OptionEngine' object has no attribute 'execute'

  • 写回答

4条回答 默认 最新

  • tianfu668 2023-02-24 20:40
    关注

    从别的地方找到答案了,降级到2.0以下就行了,或者改脚本

    最新版本的SQLAlchemy(2.0)删除了Engine.execute。目前您可能需要降级SQLAlchemy

      python -m pip install --upgrade 'sqlalchemy<2.0'
    
    

    (or如果使用conda,则为等效的conda命令)。
    或者,正如Gord Thompson在他的评论中指出的,用sqlalchemy.text Package 查询。

    from sqlalchemy import text
    # ...
    with engine.begin() as conn:
        query = text("""SELECT * FROM tbl""")
        df = pd.read_sql_query(query, conn)
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • BitGPT 2023-02-24 19:25
    关注

    该回答引用ChatGPT

    这个错误可能是由于 SQLAlchemy 版本不兼容或者传递给 create_engine 函数的参数有误引起的。以下是几个可能的解决方案:

    1、确认 SQLAlchemy 版本是否支持 execute 方法:检查所使用的 SQLAlchemy 版本是否正确,并且是否存在任何已知的兼容性问题。

    2、确认数据库连接是否正常:请确保数据库服务器正在运行,并且您的用户名和密码正确。您还可以尝试使用其他数据库客户端测试您的连接,以确认它是否有效。

    3、检查 SQL 语句是否正确:请确保您的 SQL 查询语句正确,并且表名和列名正确。

    4、尝试使用不同的 SQLAlchemy 参数:您可以尝试使用其他的 create_engine 函数的参数,例如 create_engine('mysql+pymysql://user:password@host:port/database'),或者使用不同的数据库客户端(例如 MySQL Workbench)连接到数据库,以查看是否能够成功执行查询。

    5、尝试使用其他的 pandas 函数读取数据:如果以上步骤均未能解决问题,您可以尝试使用其他的 pandas 函数来读取数据,例如 pd.read_sql_table 或者 pd.read_sql。

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-24 22:25
    关注
    评论
  • GPT_Pro 2023-02-24 19:24
    关注

    该回答内容部分引用GPT,GPT_Pro更好的解决问题
    根据报错信息,可以看出,出现错误的原因是你使用sqlalchemy连接mysql数据库时,缺少了一些必要的参数或者参数填写不正确。

    首先,sqlalchemy提供了一个create_engine()函数用来连接数据库,它的参数有很多。例如:user,password,host,port,database等。而你在代码中写的engine=create_engine('mysql:7]000C'),这里仅仅是填写了一个数据库的类型,并没有填写完整的参数。所以自然会出现错误。

    其次,查看sqlalchemy官方文档,可以看到正确的使用方法应该如下:

    from sqlalchemy import create_engine
    engine = create_engine('mysql+pymysql://用户名:密码@主机IP:端口号/数据库?charset=utf8')
    

    这里你需要注意到:

    1. engine = create_engine('mysql+pymysql://用户名:密码@主机IP:端口号/数据库?charset=utf8')
      这里前面我们加上了mysql+pymysql,这是sqlalchemy在连接mysql时所必须的;
    2. 其中用户名、密码、主机IP、端口号、数据库都是必须填写的;
    3. charset=utf8 这个选项是用来规定字符集的,一般情况下都要加上。

    所以修改之后的代码应该如下:

    from sqlalchemy import create_engine
    engine = create_engine('mysql+pymysql://用户名:密码@主机IP:端口号/数据库?charset=utf8')  # 修改连接mysql的部分
    sql = 'select * from stock_basic;'  # 定义sql语句
    df = pd.read_sql_query(sql, engine)  # 运行sql语句
    

    至此,使用sqlalchemy查询mysql就不会出错了。
    如果回答有帮助,望采纳。

    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 修改了问题 2月24日
  • 创建了问题 2月24日

悬赏问题

  • ¥30 android百度地图SDK海量点显示标题
  • ¥15 windows导入environment.yml运行conda env create -f environment_win.yml命令报错
  • ¥15 这段代码可以正常运行,打包后无法执行,在执行for内容之前一直不断弹窗,请修改调整
  • ¥15 C语言判断有向图是否存在环路
  • ¥15 请问4.11到4.18以及4.27和4.29公式的具体推导过程是怎样的呢
  • ¥20 将resnet50中的卷积替换微ODConv动态卷积
  • ¥15 通过文本框输入商品信息点击按钮将商品信息列举出来点击加入购物车商品信息添加到表单中
  • ¥100 这是什么压缩算法?如何解压?
  • ¥20 upload上传实验报错500,如何解决?(操作系统-windows)
  • ¥15 谁知道 ShaderGraph 那个节点可以接入 Particle System -> Custom Data