cia*_*vam 16 python sqlalchemy pandas pandasql
我对以下代码有问题:
from pandasql import sqldf
import pandas as pd
df = pd.DataFrame({'column1': [1, 2, 3], 'column2': [4, 5, 6]})
query = "SELECT * FROM df WHERE column1 > 1"
new_dataframe = sqldf(query)
print(new_dataframe)
Run Code Online (Sandbox Code Playgroud)
当我提交时,出现以下错误:
Traceback (most recent call last):
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\sqlalchemy\engine\base.py: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 ~\AppData\Local\Programs\Spyder\pkgs\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File c:\users\yv663dz\downloads\untitled1.py:18
new_dataframe = sqldf(query)
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\pandasql\sqldf.py:156 in sqldf
return PandaSQL(db_uri)(query, env)
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\pandasql\sqldf.py:61 in __call__
result = read_sql(query, conn)
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\pandas\io\sql.py:592 in read_sql
return pandas_sql.read_query(
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\pandas\io\sql.py:1557 in read_query
result = self.execute(*args)
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\pandas\io\sql.py:1402 in execute
return self.connectable.execution_options().execute(*args, **kwargs)
File ~\AppData\Local\Programs\Spyder\Python\lib\site-packages\sqlalchemy\engine\base.py:1412 in execute
raise exc.ObjectNotExecutableError(statement) from err
ObjectNotExecutableError: Not an executable object: 'SELECT * FROM df WHERE column1 > 1'
Run Code Online (Sandbox Code Playgroud)
我安装了最新版本的 pandas、pandasql 和 sqlalchemy,并使用 Spyder 作为 IDE。有人可以帮我吗?
sna*_*erb 40
SQLAlchemy 2.0(2023 年 1 月 26 日发布)要求原始 SQL 查询由sqlalchemy.text.
此错误消息的一般解决方案是将查询文本传递给sqlalchemy.text()
from sqlalchemy import text
...
query = text("SELECT * FROM some_table WHERE column1 > 1")
Run Code Online (Sandbox Code Playgroud)
然而在这种情况下,OP 使用pandasql,它需要一个字符串。似乎没有一种直接的方法可以使 pandasql 与 SQLAlchemy >= 2.0 兼容,并且该包似乎未维护,因此唯一的解决方案是找到一个已解决问题的 fork(有一些),fork 该项目您自己修复它,或者使用 Python 包管理器降级您的 SQLAlchemy 安装。例如,如果您使用pip:
python3 -m pip install --upgrade 'sqlalchemy<2.0'
Run Code Online (Sandbox Code Playgroud)