tob*_*man 3 python sql-server sqlalchemy pandas
我在将日期时间从 SQL Server 数据库导入 Pandas 时遇到问题。
我正在使用以下代码:
data = pd.read_sql('select top 10 timestamp from mytable',db)
Run Code Online (Sandbox Code Playgroud)
'MyTable' 包含一个列 'Timestamp',它是 DateTime2 类型的。
如果db是 pyodbc 数据库连接,这可以正常工作,并且我的时间戳作为数据类型“datetime64[ns]”返回。但是,如果db使用创建的 SQL Alchemy 引擎,create_engine('mssql+pyodbc://...')则返回的时间戳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 datetime 对象,我需要创建 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)
Run Code Online (Sandbox Code Playgroud)
该?driver=...部分强制 SQL Alchemy 使用正确的驱动程序。
| 归档时间: |
|
| 查看次数: |
1088 次 |
| 最近记录: |