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'

从别的地方找到答案了,降级到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)


该回答引用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。

该回答内容部分引用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就不会出错了。
如果回答有帮助,望采纳。