【问题标题】:Calling date from text file in sql query using python使用python从sql查询中的文本文件中调用日期
【发布时间】:2019-03-26 22:32:42
【问题描述】:

我正在尝试使用 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

然后我想将我的结果保存到数据框 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 是否也拉出列标题,因为目前我正在将列标题与其他代码分开插入。提前致谢

【问题讨论】:

  • 尝试将绑定变量的“%s”位置更改为“:1”和“:2”。这就是我一直在 oracle 中进行绑定的方式。不确定它是否会解决任何问题。当然要去掉"s。
  • 它工作...谢谢 Jacobr365
  • 很高兴为您提供帮助。请接受答案。

标签: python pandas cx-oracle strptime


【解决方案1】:

cx_oracle 采用 ":1 , :2, :3" 或字典形式的绑定变量。

尝试将绑定变量的“%s”位置更改为“:1”和“:2”。这就是我一直在 oracle 中进行绑定的方式。不确定它是否会解决任何问题。当然要去掉"s。

你也可以用字典来做,让它成为 ":val1" & ":val2" 然后传入字典而不是像 {"val1":"something", "val2":"something2 这样的列表"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多