我尝试使用sqlalchemy引擎直接从我的sqlserver数据库创建一个panda DataFrame:
engine = create_engine(URL_string, echo=False, future=True)
query_string = "..."
dt = pd.read_sql(query_string, engine)
但这产生了这个错误:
File <redacted>/venv/lib/python3.8/site-packages/sqlalchemy/future/engine.py:320, in Engine._not_implemented(self, *arg, **kw)
319 def _not_implemented(self, *arg, **kw):
--> 320 raise NotImplementedError(
321 "This method is not implemented for SQLAlchemy 2.0."
322 )
NotImplementedError: This method is not implemented for SQLAlchemy 2.0.
我这样做是因为单独使用pyodbc的连接会给出一个警告:
UserWarning: pandas only support SQLAlchemy connectable(engine/connection) ordatabase string URI or sqlite3 DBAPI2 connectionother DBAPI2 objects are not tested, please consider using SQLAlchemy
warnings.warn(
我使用的是sqlalchemy版本1.4 ...那么我该如何解决这个问题呢?
4条答案
按热度按时间v9tzhpje1#
只需从
engine
参数中删除future=True
:那你应该可以走了!
ygya80vv2#
这对我使用pyodbc和panda很有效。只要替换查询和连接信息就行了。
kognpnkq3#
不幸的是,这看起来是一个开放的问题,将不会得到解决,直到Pandas2.0,你可以找到一些关于这个here和这里的信息。
我没有找到任何令人满意的工作,但有些人似乎正在使用两种配置的引擎,一个与旗帜未来假:
如果您像以前那样创建查询字符串,这个解决方案就可以了,但是如果您使用ORM,我能做的最好的事情就是创建一个自定义函数,这可能远不是最佳的,但是可以工作:
nvbavucw4#
根据文档,访问
execute
函数最简单的方法是通过engine.connect()
上下文管理器,你还需要使用text
函数,因为execute函数不再接受原始字符串。这就是我的工作:
https://docs.sqlalchemy.org/en/20/core/connections.html#basic-usage