当我将 python 代码设置为在 VM 服务器上运行时,我试图理解以下错误,该服务器在我的桌面上安装了 3.9.5 而不是 3.8.5。不确定这是否重要,但这可能是部分原因。
错误
C:\ProgramData\Miniconda3\lib\site-packages\pandas\io\sql.py:758: UserWarning: pandas only support SQLAlchemy connectable(engine/connection) or
database string URI or sqlite3 DBAPI2 connection
other DBAPI2 objects are not tested, please consider using SQLAlchemy
warnings.warn(
这是在一个相当简单的 .py 文件中,该文件导入了 pyodbc 和 sqlalchemy fwiw。产生警告的相当通用/简单的 sql 调用版本是:
myserver_string = "xxxxxxxxx,nnnn"
db_string = "xxxxxx"
cnxn = "Driver={ODBC Driver 17 for SQL Server};Server=tcp:"+myserver_string+";Database="+db_string +";TrustServerCertificate=no;Connection Timeout=600;Authentication=ActiveDirectoryIntegrated;"
def readAnyTable(tablename, date):
conn = pyodbc.connect(cnxn)
query_result = pd.read_sql_query(
'''
SELECT *
FROM [{0}].[dbo].[{1}]
where Asof >= '{2}'
'''.format(db_string,tablename,date,), conn)
conn.close()
return query_result
我在 python 中使用 pyodbc 看到的所有示例看起来都非常相似。 pyodbc 是否已被弃用?有没有更好的方法可以在没有警告的情况下实现类似的结果?
原文由 Josh Knechtel 发布,翻译遵循 CC BY-SA 4.0 许可协议
至少在过去的几年里,pandas 的文档已经明确指出它需要一个 SQLAlchemy
Connectable
(即Engine
或Connection
对象)或 SQLite DBAPI 连接。 (切换到 SQLAlchemy 几乎是普遍的,但他们继续支持 SQLite 连接以实现向后兼容性。)人们一直在通过其他 DBAPI 连接(如 pyodbcConnection
对象)进行读取操作,而 pandas 没有抱怨… 到现在。是的。您可以采用现有的 ODBC 连接字符串并使用它来创建 SQLAlchemy
Engine
对象,如 SQLAlchemy 1.4 文档 中所述:然后将
engine
传递给您需要使用的 pandas 方法。