ami*_*min 3 sql python-3.x pandas pandasql
我需要 pandasql 库来对我的 pandas 数据框进行一些查询。我在一个简单的示例上运行以下代码并收到以下错误。奇怪的是,不能将其视为查询!我尝试重新安装并升级 pandasql、pandas、pip 和其他一些,但我找不到问题所在。我使用的是 Jupiter Notebook,编译器是 Ubuntu 20.04.5 LTS 上的 python3.8。
代码:
import pandas as pd
import pandasql as ps
import numpy as np
df = pd.DataFrame([[1234, 'Customer A', '123 Street', np.nan],
[1234, 'Customer A', np.nan, '333 Street'],
[1233, 'Customer B', '444 Street', '333 Street'],
[1233, 'Customer B', '444 Street', '666 Street']], columns=
['ID', 'Customer', 'Billing Address', 'Shipping Address'])
q1 = """SELECT * FROM df """
ps.sqldf(q1)
Run Code Online (Sandbox Code Playgroud)
结果:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py in execute(self, statement, parameters, execution_options)
1409 try:
-> 1410 meth = statement._execute_on_connection
1411 except AttributeError as err:
AttributeError: 'str' object has no attribute '_execute_on_connection'
The above exception was the direct cause of the following exception:
ObjectNotExecutableError Traceback (most recent call last)
<ipython-input-21-8b921e84766f> in <module>
13 q1 = """SELECT * FROM df """
14
---> 15 ps.sqldf(q1)
~/.local/lib/python3.8/site-packages/pandasql/sqldf.py in sqldf(query, env, db_uri)
154 >>> sqldf("select avg(x) from df;", locals())
155 """
--> 156 return PandaSQL(db_uri)(query, env)
~/.local/lib/python3.8/site-packages/pandasql/sqldf.py in __call__(self, query, env)
59
60 try:
---> 61 result = read_sql(query, conn)
62 except DatabaseError as ex:
63 raise PandaSQLException(ex)
~/.local/lib/python3.8/site-packages/pandas/io/sql.py in read_sql(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize)
588 )
589 else:
--> 590 return pandas_sql.read_query(
591 sql,
592 index_col=index_col,
~/.local/lib/python3.8/site-packages/pandas/io/sql.py in read_query(self, sql, index_col, coerce_float, parse_dates, params, chunksize, dtype)
1558 args = _convert_params(sql, params)
1559
-> 1560 result = self.execute(*args)
1561 columns = result.keys()
1562
~/.local/lib/python3.8/site-packages/pandas/io/sql.py in execute(self, *args, **kwargs)
1403 def execute(self, *args, **kwargs):
1404 """Simple passthrough to SQLAlchemy connectable"""
-> 1405 return self.connectable.execution_options().execute(*args, **kwargs)
1406
1407 def read_table(
~/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py in execute(self, statement, parameters, execution_options)
1410 meth = statement._execute_on_connection
1411 except AttributeError as err:
-> 1412 raise exc.ObjectNotExecutableError(statement) from err
1413 else:
1414 return meth(
ObjectNotExecutableError: Not an executable object: 'SELECT * FROM df '
Run Code Online (Sandbox Code Playgroud)
小智 8
这可能是因为sqlalchemy 2.0中的重大更改。SQL 查询现在必须包装在sqlalchemy.text()函数中才能使其可执行。
了解您当前的 sqlalchemy 版本将有助于了解这是否是您面临的问题。
SQLAlchemy降级到版本 1.4.46后我能够让它工作,
pip install sqlalchemy==1.4.46
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2319 次 |
| 最近记录: |