在网上查了用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')
这里你需要注意到:
所以修改之后的代码应该如下:
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就不会出错了。
如果回答有帮助,望采纳。