【发布时间】:2019-10-21 00:14:30
【问题描述】:
我正在使用 pyodbc 从数据库表中提取数据。现在,我想将查询限制为仅包含在过去 24 小时内添加的记录。有关添加记录时间的信息包含在 DATE_ADDED 列中。
这就是我正在尝试的:
pyodbc.pooling = False
conn_str = (
r'DRIVER={Oracle in OraClient12Home1};'
.....
.....
.....)
conn = pyodbc.connect(conn_str)
curs = conn.cursor()
date_today = datetime.datetime.today()
date_yesterday = date_today - datetime.timedelta(days=1)
sql = f"SELECT PROD_ID, ID, COUNT, DATE_ADDED FROM LZE.APODAT WHERE DATE_ADDED < {date_today} AND DATE_ADDED > {date_yesterday}"
my_df = pd.DataFrame(pd.read_sql(sql, conn))
我得到的错误信息是:
UnicodeDecodeError: 'utf-16-le' 编解码器无法在适当位置解码字节 218-219:非法编码
我确定这与 DATE_ADDED 列的不同格式/数据类型有关,但我不确定如何处理。在数据库中如下所示:2019-04-24 10:21:05 AM
任何帮助将不胜感激。
【问题讨论】:
-
尝试用引号括住您的日期:
'{date_today}' -
我以前试过。它给了我同样的错误
-
如果我试试这个:
... WHERE TRUNC(DATE_ADDED) < TO_DATE('{date_today}','YYYY/MM/DD HH:MI:SS') AND TRUNC(DATE_ADDED) > TO_DATE('{date_yesterday}','YYYY/MM/DD HH:MI:SS')"我得到同样的错误 -
是的,如果我删除 where 子句,我可以提取整个表。你会在哪里怀疑这个特殊角色?在数据库列中?
标签: python oracle datetime where-clause pyodbc