我在将日期时间从 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/