SQL Server DATE 作为字符串检索到 pandas 中

2024-02-14

当我将“日期”变量从 SQL Server 拉入 Python/Pandas 时,它作为“对象”出现。我已经安装并尝试了多个驱动程序(代码中显示了尝试过的注释驱动程序),每次都有相同的结果:

import pandas as pd
import pyodbc

conn_str = (
    r'Driver={SQL Server Native Client 11.0};'
    # r'Driver={SQL Server Native Client 10.0};'
    # r'Driver={ODBC Driver 11 for SQL Server};'
    # r'Driver={ODBC Driver 13 for SQL Server};'
    # r'Driver={SQL Server};'
    r'Server=MyServer;'
    r'Database=MyDB;'
    r'Trusted_Connection=yes;'
    )

cnxn = pyodbc.connect(conn_str)

sql = (
    "Select cast('2017-08-19' as date) [DateVar]"
    ", cast('2017-08-19' as datetime) [DateTimeVar]"
    ", cast('2017-08-19' as datetime2) [DateTime2Var]"
    )

d2 = pd.read_sql(sql,cnxn)

cnxn.close()

print(d2.dtypes)

返回结果为:

DateVar                 object
DateTimeVar     datetime64[ns]
DateTime2Var    datetime64[ns]
dtype: object

我希望 DateVar 是一个日期时间。有什么想法为什么会发生这种情况吗?

和这个人有同样的问题:pyodbc 将 SQL Server DATE 字段作为字符串返回 https://stackoverflow.com/questions/7172540/pyodbc-returns-sql-server-date-fields-as-strings但他的解决方法是使用我已经安装的 {SQL Server Native Client 10.0},但它对我不起作用。

我连接的 SQL Server 版本是:

Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) 
Oct 20 2015 15:36:27 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

UPDATES

1>

根据Max的输入,尝试了sqlalchemy,但没有运气,这仍然给了我一个字符串:

import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://MyDatabase/MyDB?driver=SQL+Server+Native+Client+10.0')
d2 = pd.read_sql(sql, engine)

2>

根据 Flipper 的 Q,仅使用 Pyodbc 游标完成了此操作,看起来在使用 Native Client 11.0 时游标中返回了正确的日期数据类型:

(('DateVar', datetime.date, None, 10, 10, 0, True),
 ('DateTimeVar', datetime.datetime, None, 23, 23, 3, True),
 ('DateTime2Var', datetime.datetime, None, 27, 27, 7, True))

这表明问题出在 Pandas 对 dtype 的处理中日期时间.日期加载到数据帧时。


Use the parse_dates的参数pandas.read_sql http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html来指定DateVar列值在数据帧加载时显式转换为日期时间。

更新了原来的代码片段:

...
d2 = pd.read_sql(sql=sql,
                 con=cnxn,
                 # explicitly convert DATE type to datetime object
                 parse_dates=["DateVar"])

cnxn.close()

print(d2.dtypes)

Returns

DateVar         datetime64[ns]
DateTimeVar     datetime64[ns]
DateTime2Var    datetime64[ns]
dtype: object

在 Windows 上使用 pyodbc 4.0.17、pandas 0.20.3 和 SQL Server 2014 进行了测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server DATE 作为字符串检索到 pandas 中 的相关文章

随机推荐

  • 我如何告诉 Masonry 组件它的单元格已经改变了高度?

    我有一个反应组件 它以网格模式显示一维项目列表 每个项目都具有相同的宽度和高度 并且它们位于三列内 可能有很多这样的东西 所以我决定使用 Masonry 组件来尝试一下 React virtualized 该组件似乎是专门为这个用例而编写的
  • 如何在 C# 中创建 X509Certificate2 时更改颁发者名称

    我正在我的 C net 应用程序中创建 X509Certificate2 证书 创建证书时 如何设置颁发者名称 目前发行人名称与主体名称相同 请帮忙 Hmm 终于我用了充气城堡 dll创建证书 使用它 有一种方法可以设置颁发者名称 这是要生
  • --ntasks 或 -ntasks 在 SLURM 中起什么作用?

    我正在使用SLURM http slurm schedmd com 使用一些计算集群 它有 ntasks or n 我显然已经阅读了它的文档 http slurm schedmd com sbatch html http slurm sch
  • 为什么清空 NavigationStack 路径后对象仍在内存中?

    我正在尝试实现一个协调器来管理流程 状态存储在 CoordinatorStore 内 有 2 个用于管理流程的 Published 属性 这screen属性控制当前显示哪个视图以及path控制堆栈视图的导航堆栈 实施细节可以在下面找到 根据
  • grunt-contrib-jshint 忽略没有效果

    我想排除libs目录免于被检查 然而 ignores in options并种植了 jshintignore项目目录中的文件不会生成libs被排除在外 jshint options smarttabs true ignores public
  • 让 Sphinx 替换文档字符串文本

    我正在 Sphinx 中记录类似于以下内容的代码 class ParentClass object def init self pass def generic fun self Call this function using run P
  • Zend框架中的内连接

    我想在两个表之间进行内连接 访问表有 访问id target 报告表有 rep id visit id 每次访问都有很多报告 我想选择所有指定访问目标的报告 我这样做但它不起作用 db Zend Db Table getDefaultAda
  • Mercurial 显示文件修改不正确

    当我克隆 Mercurial 存储库时 它通常会显示文件已被修改 而实际上尚未修改 当我执行以下步骤时可能会发生这种情况 hg clone
  • 片段中的列表视图不起作用

    这是我的片段代码 public class LeftFragment extends ListFragment ArrayList
  • 带参数的装饰器[重复]

    这个问题在这里已经有答案了 代码如下 def my dec func def wrap w t func w return t 4 return wrap my dec def testing n return n new testing
  • C# Web 浏览器选择列表项单击

    我正在尝试使用以下方法从选择列表框中选择项目 var elements webBrowser1 Document GetElementsByTagName select foreach HtmlElement element in elem
  • 什么相当于 C# 中的 Microsoft.VisualBasic.Collection?

    我有一个方法 它需要一个存储过程名称和一个Microsoft VisualBasic Collection http msdn microsoft com en us library microsoft visualbasic collec
  • 在 Laravel 4 中缓存视图输出

    我知道 Blade 已经缓存了所有 Blade 视图的已编译 PHP 但我想更进一步 我正在开发的一个网站被模块化为组件视图 然后在默认控制器中拼凑在一起 每个 小部件 都有自己的视图 很少更改内容 少数频繁更新的除外 因此 我想缓存这些很
  • Jvectormap 在 div 变化时非常小

    我有两个 div 一个是世界地图 另一个是美国地图 当在世界地图上单击美国时 我想隐藏该 div 并将美国地图带入视图 这是可行的 但地图很小 即使缩放按钮的位置表明 div 的大小是它应该的大小 有任何想法吗 如果我从一开始就将两个 di
  • 获取php中两个日期之间的周数

    我想获取给定两个日期的周数 即从 2012 01 01 到 2012 12 31 周数应该恰好落在上面指定的范围内 您可以为此提供建议吗 像这样的东西应该可以正常工作
  • 如何使用 VisualSVN Server 将现有 Visual Studio 解决方案置于源代码管理之下?

    我有一个现有的 Visual Studio 2013 解决方案 我想使用 VisualSVN Server 将其置于源代码控制之下 我安装了 VisualSVN Server 并创建了一个新的空白存储库 他们的入门 https www vi
  • MuPdf 内存不足

    您好 我在项目中使用 MuPdf 库来查看文档 问题是 当您在平板电脑上的 11 英寸 Activity 中打开 3 7 个文档时 我会出现内存溢出 当您加载新文档时 对先前文档的所有引用都会被销毁 但内存中文档的图像不会被删除 对象在 1
  • 如何在软键盘顶部的建议中添加单词

    有什么办法可以在软键盘的建议中添加单词吗 对于特定的 Edittext 字段 我想将名称列表添加到 android 2 0 中软键盘顶部弹出的建议中 有谁知道这是否可能 Here http android git kernel org p
  • 侧边栏增强插件已安装但不起作用

    系统配置 Sublime Text3 内部版本 3065 Ubuntu 14 04 我想在浏览器中添加预览 发现侧边栏增强功能 Be https github com titoBouzout SideBarEnhancements是最好的插
  • SQL Server DATE 作为字符串检索到 pandas 中

    当我将 日期 变量从 SQL Server 拉入 Python Pandas 时 它作为 对象 出现 我已经安装并尝试了多个驱动程序 代码中显示了尝试过的注释驱动程序 每次都有相同的结果 import pandas as pd import