sqlalchemy ORM with Oracle - ORA-01843:不是有效的月份错误

ahy6op9u  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(163)

我在flask中使用sqlalchemy创建了一个Web应用程序,用于从Oracle DB中查询数据。( flask 本地Web服务器)一切工作完美,但当我试图在真实的Web服务器运行它,我得到了错误ORA-01843不是一个有效的月份错误。最初我认为这可能与我在IIS中运行代码有关,但后来我尝试使用 flask 在IIS托管的服务器内开发Web服务器,并得到了完全相同的错误。我在互联网上做了一些搜索,发现了一些关于设置NLS_TIMESTAMP_FORMAT的提及(cx_Oracle 'ORA-01843: not a valid month' with unicode parameter)。但我不知道如何做到这一点。Oracle客户端在两种环境中是相同的(我的笔记本电脑和服务器)所以我认为它可能与Oracle客户端配置有关。下面是我试图执行的查询。

query = db.session.query(intervaldate.TSTART,kpi_db.VALUE)
query = query.filter(intervaldate.ID == kpi_db.INTERVAL_ID)
query = query.filter(intervaldate.TSTART>=t_ini)
query = query.filter(intervaldate.TSTART<=t_end)
query = query.filter(kpi_db.KPI_ID==1)
query = query.filter(kpi_db.CTRL_ID==ctrl_id)
query = query.all()

字符串
没什么太复杂的。我只是通知一个时间范围和两个额外的参数。我的开发环境中,它的工作,并在服务器中,它不。我试图运行这个查询也在 flask shell ,并得到完全相同的错误。有没有人在这里见过这种情况发生与sqlalchemy?

jfewjypa

jfewjypa1#

对于任何遇到这个问题并且在使用pandas时遇到这个问题的人,这是我的解决方案,也使用了to_date函数。

for index, row in df.iterrows():
        row['ROW_IN_DF'] = func.to_date(row['ROW_IN_DF'], 'MM/DD/YYYY HH24:MI:SS')

        product_line_instance = ProductCatalogLine(**row.to_dict())
        session.add(product_line_instance)

字符串

cqoc49vn

cqoc49vn2#

尽管不理解这两种环境之间的区别,但我设法找到了解决方案。sqlAlchemy有一个to_date函数,可以正确格式化Oracle的日期。所以我这样做了。

from sqlalchemy import func

...

query = db.session.query(intervaldate.TSTART,kpi_db.VALUE)
query = query.filter(intervaldate.ID == kpi_db.INTERVAL_ID)
query = query.filter(intervaldate.TSTART>=func.to_date(t_ini,'DD-MM-YYYY'))
query = query.filter(intervaldate.TSTART<=func.to_date(t_end,'DD-MM-YYYY'))
query = query.filter(kpi_db.KPI_ID==1)
query = query.filter(kpi_db.CTRL_ID==ctrl_id)
query = query.all()

字符串
和它的工作完美

相关问题