使用python在sql查询中从文本文件中调用日期

问题描述 投票:1回答:1

我试图使用python从外部文本文件输入日期到sql查询下面是我的代码:

import cx_Oracle
import pandas as pd
import numpy as np
dsn_tns = cx_Oracle.makedsn(ip, port,service_name = SERVICE_NAME)

db = cx_Oracle.connect('username', 'password', dsn_tns)
curs = db.cursor()

with open("Date.txt") as file:
log=file.read().splitlines()
import datetime
var1=datetime.datetime.strptime(log[0], "%d-%b-%Y %H:%M:%S").strftime("%d-%b-%Y %H:%M:%S")
var2=datetime.datetime.strptime(log[1], "%d-%b-%Y %H:%M:%S").strftime("%d-%b-%Y %H:%M:%S")

query = curs.execute("""SELECT * from table_name where cr_date >= TO_DATE(%s,'DD-MON-YYYY HH24:MI:SS') AND cr_date < to_date(%s,'DD-MON-YYYY HH24:MI:SS')""", (var1, var2))

from pandas import DataFrame
df = DataFrame(query.fetchall())

在这里,我将我的查询与Oracle连接,然后尝试将Date.txt中的日期插入SQL查询,其中包括两个日期,如下所示:

27-DEC-2018 00:00:00
26-JAN-2019 00:00:00

然后我想将我的结果保存到dataframe df,但在从文本文件插入日期时得到以下错误。

Traceback (most recent call last): File "C:\Users\ab\Desktop\oracle_connect.py", line 24, in <module> AND cr_date < to_date(%s,'DD-MON-YYYY HH24:MI:SS')""", (var1, var2)) cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

请告诉我运行此代码需要做哪些更改。另请告诉我,如果我的数据帧df也拉出列标题,那么我正在将列标题与其他代码分开插入。提前致谢

python pandas cx-oracle strptime
1个回答
0
投票

cx_oracle以“:1,:2,:3”或字典的形式获取绑定变量sin。

尝试将绑定变量的“%s”更改为“:1”和“:2”。这就是我一直在oracle中绑定的方式。不确定它会解决任何问题。拿出“当然。

你也可以用字典做它并使它成为“:val1”和“:val2”,然后传入字典而不是像{“val1”:“something”,“val2”:“something2”}这样的列表

© www.soinside.com 2019 - 2024. All rights reserved.