Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas读取\u sql错误读取my \u sql日期函数_Python_Mysql_Pandas_Sqlalchemy_Pymysql - Fatal编程技术网

Python Pandas读取\u sql错误读取my \u sql日期函数

Python Pandas读取\u sql错误读取my \u sql日期函数,python,mysql,pandas,sqlalchemy,pymysql,Python,Mysql,Pandas,Sqlalchemy,Pymysql,我目前正在使用SQLAlchemy将数据从MySQL数据库下载到Pandas中。数据库中的时间戳数据是字符串形式的,因此我使用MySQL函数str_to_date将其转换为日期值,然后再将其读入Pandas。然而,当我这样做的时候,我注意到熊猫没有正确地解释这个值 下面是我构造的一个简单示例,用于描述该问题 import sqlalchemy as sqla import pandas as pd # Connect to database settings = {'host': '127.0

我目前正在使用SQLAlchemy将数据从MySQL数据库下载到Pandas中。数据库中的时间戳数据是字符串形式的,因此我使用MySQL函数str_to_date将其转换为日期值,然后再将其读入Pandas。然而,当我这样做的时候,我注意到熊猫没有正确地解释这个值

下面是我构造的一个简单示例,用于描述该问题

import sqlalchemy as sqla
import pandas as pd

# Connect to database
settings = {'host': '127.0.0.1', 'user': 'root', 'passwd': 'password', 'db': 'data'}
connection_str = "mysql+pymysql://{}:{}@{}/{}".format(settings['user'], settings['passwd'],
                                                      settings['host'], settings['db'])
engine = sqla.create_engine(connection_str)
con = engine.connect()

# Build query
sql_string = sqla.text("SELECT str_to_date('2021-04-05', '%Y-%m-%d') AS date;")

# Read data
dataframe = pd.read_sql(sql_string, con)
raw_value = con.execute(sql_string).fetchone()
con.close()
接下来,如果我打印上述两个值,我将看到以下结果

> print(dataframe)

   date
0  None

> print(raw_value)

(datetime.date(2021, 4, 5),)
如您所见,如果我使用游标来获取数据,那么数据将作为datetime.date对象正确地拉入python。但是,如果我尝试使用Pandas的read_sql函数来获取数据,它将显示为None值。为什么会这样,我能做点什么来解决熊猫的问题吗?(例如,也许我可以修改一下我的查询以得到我想要的结果?)


如果有帮助的话,我目前正在运行Python 3.7.9。就我安装的软件包而言:Pandas的版本是1.1.3,sqlalchemy的版本是1.3.20,pymysql的版本是1.0.2。我从中提取此数据的MySQL数据库非常旧,运行在5.7.20版上。

如果您为read_sql()指定parse_dates参数会怎么样?尝试从查询中删除str_to_date(),并设置parse_dates={'date':'%Y-%m-%d'}我无法使用MySQL server 5.6.13(早于5.7.20)和pandas、SQLAlchemy和PyMySQL的当前版本再现您的问题。对我来说很好。