python - 使用 Pandas/SQLAlchemy 导入日期时间

标签 python sql-server pandas sqlalchemy

我在将日期时间从 SQL Server 数据库导入 Pandas 时遇到问题。

我正在使用以下代码:

data = pd.read_sql('select top 10 timestamp from mytable',db)

“MyTable”包含一列“Timestamp”,其类型为 DateTime2。

如果 db 是一个 pyodbc 数据库连接,这工作正常,我的时间戳作为数据类型“datetime64[ns]”返回。但是,如果 db 是使用 create_engine('mssql+pyodbc://...') 创建的 SQL Alchemy 引擎,则时间戳将在 data 中返回属于“对象”类型,稍后会在我的代码中引起问题。

知道为什么会这样吗?我使用的是 pandas 版本 0.14.1、pyodbc 版本 3.0.7 和 SQL alchemy 版本 0.9.4。如何最好地将数据强制为 datetime64[ns]?

最佳答案

原来问题源于 SQL Alchemy 如何调用 PyODBC。默认情况下,它将使用不支持 DateTime2 的“SQL Server”驱动程序。当我直接使用 PyODBC 时,我使用的是“SQL Server Native Client 10.0”驱动程序。

为了获得正确的行为,即返回 python 日期时间对象,我需要按如下方式创建 SQL Alchemy 引擎:

import sqlalchemy as sql
connectionString = 'mssql+pyodbc://username:password@my_server/my_database_name?driver=SQL Server Native Client 10.0'
engine = sql.create_engine(connectionString)

?driver=... 部分强制 SQL Alchemy 使用正确的驱动程序。

关于python - 使用 Pandas/SQLAlchemy 导入日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25607775/

相关文章:

sql-server - 计算总返回率 0

sql-server - Azure SQL 自动化存储过程

python & pandas - 删除列值是另一个 DataFrame 中的索引值的行

python - 多索引 Pandas 数据框子集分配

python - python 作为服务的 xlsxwriter 中的 "No such file or directory"

python - 检查 xml ElementTree 节点是否为 None/False

python - 在 Numpy 中计算累积返回,数组索引问题

python - Pandas 数据帧 : How to groupby on a groupby?

sql-server - 我可以让 SQL Server 每 n 秒调用一个存储过程吗?

python - 将弹出窗口添加到 folium 中的 geojson 层