Python 识别sql中的日期类型

Python 识别sql中的日期类型,python,sql-server,python-3.x,pandas,Python,Sql Server,Python 3.x,Pandas,在中使用read\u sql时,函数需要确定哪些列应被视为日期(请参见下面的代码片段)。但我事先不知道什么列是日期 给定select语句,我需要检索它的列类型并将结果集加载到dataframe中。我希望pandas能够识别date类型的列,并在从select创建数据帧时分配类型 在select语句或数据框中标识日期类型的最佳方法是什么?我试图避免使用pyodbc运行语句来检测类型 import pyodbc import pandas as pd conn = pyodbc.connect.

在中使用
read\u sql
时,函数需要确定哪些列应被视为日期(请参见下面的代码片段)。但我事先不知道什么列是日期

给定select语句,我需要检索它的列类型并将结果集加载到dataframe中。我希望pandas能够识别date类型的列,并在从select创建数据帧时分配类型

在select语句或数据框中标识日期类型的最佳方法是什么?我试图避免使用
pyodbc
运行语句来检测类型

import pyodbc
import pandas as pd 

conn = pyodbc.connect....

sql_df = pd.read_sql(
    "SELECT * FROM my_table",
    conn,
    parse_dates=[
        'created_at',
        'updated_at'
    ]
)

请参阅sql数据库数据类型。 RDBMS将哪些列视为日期戳将非常清楚

例如,在查询postgres后端时, 您可以找到如下类型:

[1024 rows x 2 columns]
created    datetime64[ns]
name               object
您可能会发现使用从日期到时间戳的postgres转换很有帮助:

SELECT created::TIMESTAMP, ... FROM ...
如果您查询的是存储 作为VARCHAR的时间信息, 会有点痛的。 您确实希望将时间数据存储在合适的列类型中

您可能会发现sqlserver强制转换非常有用,例如:

SELECT CAST (created AS datetime), ... FROM ...

请参阅sql数据库数据类型。 RDBMS将哪些列视为日期戳将非常清楚

例如,在查询postgres后端时, 您可以找到如下类型:

[1024 rows x 2 columns]
created    datetime64[ns]
name               object
您可能会发现使用从日期到时间戳的postgres转换很有帮助:

SELECT created::TIMESTAMP, ... FROM ...
如果您查询的是存储 作为VARCHAR的时间信息, 会有点痛的。 您确实希望将时间数据存储在合适的列类型中

您可能会发现sqlserver强制转换非常有用,例如:

SELECT CAST (created AS datetime), ... FROM ...

如果在MS SQL Server和pandas中使用pyodbc,要识别
df.dtypes
type date,需要在SQL Server中将列定义为
datetime
,在
ds.dtypes
中,如果在MS SQL Server和pandas中使用pyodbc,要识别
df.dtypes
type date,您需要将SQL Server中的列定义为
datetime
,在
ds.dtypes
中,您将得到
datetime64[ns]

请参见:Juan,此链接不提供答案为什么您事先不知道数据类型?数据库是具有已知模式的计划资源。表不应该动态地构建,并且具有数百到数千列可能是表设计的问题。事实上,使用
*
可能效率不高,因为您可以检索大型开放式文本和CLOB/BLOB字段。请看:Juan,这个链接没有提供答案为什么您事先不知道数据类型?数据库是具有已知模式的计划资源。表不应该动态地构建,并且具有数百到数千列可能是表设计的问题。事实上,使用
*
可能效率不高,因为您可以检索大型开放式文本和CLOB/BLOB字段。请看,select语句中的日期类型是“object”,与字符串相同。无法区分数据库是SQL Server,列的类型是DATE。我只需选择列,在
dtypes
中,值是
object
I,select语句中的日期类型是“object”,与字符串相同。无法区分数据库是SQL Server,列的类型是DATE。我只需选择列,在
dtypes
中,值为
object