sqlalchemy+pandas:错误 'OptionEngine' object has no attribute 'execute','str' object has no attribute '_execute_on_connection'
场景:使用 sqlalchemy+pandas
1. 'OptionEngine' object has no attribute 'execute'
import pandas as pd
from sqlalchemy import create_engine, text engine = create_engine('mysql+pymysql://root:root1234@127.0.0.1:3308/beststock')
sql = "select max(id) as maxrid FROM tspro_stock_basic " df = pd.read_sql(sql, engine)
print(df)
Error: 提示报错信息:
Traceback (most recent call last):
File "C:\Users\Google_he\PycharmProjects\trunk\PyStock\UnitTest\Test_Sqlalchemy.py", line 15, in <module>
df = pd.read_sql(sql, engine)
File "D:\Program Files (x86)\Python39\lib\site-packages\pandas\io\sql.py", line 591, in read_sql
return pandas_sql.read_query(
File "D:\Program Files (x86)\Python39\lib\site-packages\pandas\io\sql.py", line 1561, in read_query
result = self.execute(*args)
File "D:\Program Files (x86)\Python39\lib\site-packages\pandas\io\sql.py", line 1406, in execute
return self.connectable.execution_options().execute(*args, **kwargs)
AttributeError: 'OptionEngine' object has no attribute 'execute'
排查:
查看 pd.read_sql 的 python 源码,原来,需要传递的是一个 connection,
def read_sql(
sql,
con,
index_col: str | list[str] | None = None,
coerce_float: bool = True,
params=None,
parse_dates=None,
columns: list[str] | None = None,
chunksize: int | None = None,
) -> DataFrame | Iterator[DataFrame]:
打印 传递的 engine 类型
print(type(engine))
// <class 'sqlalchemy.engine.base.Engine'>
// 原来对象传递错了,建立 connection,可以通过 engine.connect() 方法 print(type(engine.connect()))
<class 'sqlalchemy.engine.base.Connection'>
所以,需要改成
import pandas as pd
from sqlalchemy import create_engine, text engine = create_engine('mysql+pymysql://root:root1234@127.0.0.1:3308/beststock')
sql = "select max(id) as maxrid FROM tspro_stock_basic " # df = pd.read_sql(text(sql), con=engine.connect()) df = pd.read_sql(sql, engine.connect())
print(df)
2. 'str' object has no attribute '_execute_on_connection'
改成上面的代码后,出现了下面的错误
Traceback (most recent call last):
File "D:\Program Files (x86)\Python39\lib\site-packages\sqlalchemy\engine\base.py", line 1410, in execute
meth = statement._execute_on_connection
AttributeError: 'str' object has no attribute '_execute_on_connection' The above exception was the direct cause of the following exception: Traceback (most recent call last):
File "C:\Users\Google_he\PycharmProjects\trunk\PyStock\UnitTest\Test_Sqlalchemy.py", line 16, in <module>
df = pd.read_sql(sql, engine.connect())
File "D:\Program Files (x86)\Python39\lib\site-packages\pandas\io\sql.py", line 591, in read_sql
return pandas_sql.read_query(
File "D:\Program Files (x86)\Python39\lib\site-packages\pandas\io\sql.py", line 1561, in read_query
result = self.execute(*args)
File "D:\Program Files (x86)\Python39\lib\site-packages\pandas\io\sql.py", line 1406, in execute
return self.connectable.execution_options().execute(*args, **kwargs)
File "D:\Program Files (x86)\Python39\lib\site-packages\sqlalchemy\engine\base.py", line 1412, in execute
raise exc.ObjectNotExecutableError(statement) from err
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: 'select max(id) as maxrid FROM tspro_stock_basic '
继续查看 read_sql() 的源码,关于入参 sql 的注释及示例
sql : str or SQLAlchemy Selectable (select or text object)
SQL query to be executed or a table name.
再次改成下面,还是错误依旧
df = pd.read_sql("select max(id) as maxrid FROM tspro_stock_basic ", engine.connect())
确定是 入参 sql 的类型有问题,再次看到上面有提到的 text object,看来还是需要转换一下
import pandas as pd
from sqlalchemy import create_engine, text engine = create_engine('mysql+pymysql://root:root1234@127.0.0.1:3308/beststock')
sql = "select max(id) as maxrid FROM tspro_stock_basic " df = pd.read_sql(text(sql), con=engine.connect())
print(df) ---- output ----
maxrid
0 5066
sqlalchemy+pandas:错误 'OptionEngine' object has no attribute 'execute','str' object has no attribute '_execute_on_connection'的更多相关文章
- Django2.2报错 AttributeError: 'str' object has no attribute 'decode'
准备将 Django 连接到 MySQL,在命令行输入命令 python manage.py makemigrations 后报错: AttributeError: 'str' object has ...
- Django项目与mysql交互进行数据迁移时报错:AttributeError: 'str' object has no attribute 'decode'
问题描述 Django项目启动,当我们执行命令 python manage.py makemigrations 出现如下错误: File , in last_executed_query query ...
- 解决编码问题:AttributeError: 'str' object has no attribute 'decode'
1. 问题发现: 出现:读取文件,对其进行解码,出现错误,AttributeError: 'str' object has no attribute 'decode' 解释:属性错误,str对象不包含 ...
- Django 运行报异常:AttributeError: 'str' object has no attribute 'get'
Technorati Tags: Python,Django,Web 在使用django.contrib.auth用户机制进行用户的验证.登录.注销操作时,遇到这个异常. 首先是写了一个登录的视图,要 ...
- Python PyInstaller 打包报错:AttributeError: 'str' object has no attribute 'items'
pyinstaller打包时报错:AttributeError: 'str' object has no attribute 'items' 网上查询,可能是setuptools比较老: 更新一下 p ...
- 【Python-遇到的Error】AttributeError: 'str' object has no attribute 'input_text'
学习类的实例化的时候遇到了AttributeError: 'str' object has no attribute 'input_text', 以下是报错的代码及修改正确的代码. class shu ...
- python2 'str' object has no attribute 'decode'
'.decode('hex') 上述代码,报错: 'str' object has no attribute 'decode' 查找原因: https://stackoverflow.com/ques ...
- python3.x运行的坑:AttributeError: 'str' object has no attribute 'decode'
1.Python3.x和Python2.X版本有一些区别,我遇到了两个问题如下: a.第一个报:mysqlclient 1.3版本不对: 解决办法:注释掉这行即可: b.第二个报:字符集的问题: 报错 ...
- python自动化测试,读取excal数据报"'str' object has no attribute 'items'"问题解决
通过python进行自动化测试,为了方便,对代码和数据进行了分离,此处把测试数据放到了excal表格中.requests.post请求时报"'str' object has no attri ...
- Django项目启动 AttributeError: ‘str‘ object has no attribute ‘decode‘ 问题
Watching for file changes with StatReloader Performing system checks... System check identified no i ...
随机推荐
- 基于OpenLayers使用WFS实现GeoServer地图要素的增删改查
1. 概述 Web Feature Service(WFS)接口标准定义了一组接口,用于在Internet上访问要素和要素属性级别的地理信息.WFS提供了检索或查询矢量要素的方法,这种方法独立于它们发 ...
- pytorch学习笔记四之训练分类器
训练分类器¶ 1. 数据¶ 处理图像,文本,音频或视频数据时,可以使用将数据加载到 NumPy 数组中的标准 Python 包. 然后,将该数组转换为torch.*Tensor 对于图 ...
- Postgresql 定制执行计划pg_hint_plan
一.概述 Plan Hint是PG社区官方版"永远"不考虑引入的功能之一,社区开发者的理念是,引入Hint功能,会掩盖优化器本身的问题,导致缺陷不被暴露出来.但对于使用者来讲,遇到 ...
- LeetCode-398 随机数索引
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/random-pick-index 题目描述 给定一个可能含有重复元素的整数数组,要求随机输出给定 ...
- Android 数据回显
public class EchoDataUtils { /** * 保存文件到手机内存 * @param context * @param number * @param psw * @return ...
- 前端回血day24 flex子项伤的CSS属性
取值 含义 order 可以通过设置order改变某一个flex子项的排序位置.所有flex子项的默认order属性值是0 flex-grow 属性中的grow是扩展的意思,扩展的就是flex子项所占 ...
- 解决scroll中addEventListener不生效的问题
这样写会出现一个情况,滚动的时候不打印任何值,并没有进入具体方法 但是下面这种方法 加一个true就会打印出相应的值
- Android FragmentTabHost底部选项卡实现
记录一下底部选项卡的实现,很常见的代码,大神勿嘲笑. 说一下思路,在activity底部要放上FragmentTabHost放上选项,几个无所谓,每个选项卡都对应一个fragment,点击选项卡颜色改 ...
- java字段值为null,不返回该字段
jackSon注解– @JsonInclude 注解不返回null值字段 @Data @JsonInclude(JsonInclude.Include.NON_NULL) public class R ...
- golang 切片(slice)
1.切片的定义 切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型. 切片的使用与数组类似,遍历,访问切片元素等都一样.切片是长度是可以变化的,因此切片可以看做是一个动态数组. 一个 ...