【问题标题】:Bind a non-fixed variable in SQL statement in Python [closed]在Python的SQL语句中绑定一个非固定变量[关闭]
【发布时间】:2020-07-17 16:34:55
【问题描述】:

我想在python的SQL语句中绑定一个不包含固定值的变量:

例子:

import cx_Oracle
def(var1, var2):
....
  chkdate = datetime.datetime.now().strftime('%d-%m-%Y')
  #some lines of code
  def db_select_query(conn_data,query,column_names):
    conn_str = 'some user defined data'
    conn = cx_Oracle.conn(conn_str)
    cur = conn.cursor()
    cur.execute(query, chkdate)
  #some lines of code
  query = """Select * from Table_A where date > :chkdate"""

但这似乎不起作用。我怎样才能做到这一点?

【问题讨论】:

  • 你为什么打电话给query 之后 cur.execute?请提供有关 DB-API(即 pyodbc、psycopg2、pymysql)的建议,因为这取决于如何运行命名参数。
  • @Parfait ,查询是在一个函数中定义的,我稍后会调用它,当我传入硬编码值时它工作正常,但我希望它接受问题中提到的任何变量..有可能吗?
  • 我不明白你的例子。我仍然问我原来的问题。但请阅读有关如何使用 bind named parameterscxOracle 的文档。

标签: python python-3.x datetime python-sql


【解决方案1】:

请参阅 cx_Oracle 绑定 doc,如 cmets 中所述。

如果您将日期绑定为字符串,则需要匹配您的 Oracle 安装使用的默认日期格式。相反,您可以直接绑定日期。尝试类似:

with connection.cursor() as cursor:
    chkdate = datetime.datetime.now()
    sql = """select last_name, hire_date from employees where hire_date + (365*13) > :d"""
    for r in cursor.execute(sql, [chkdate]):
        print(r)

数据算术只是因为示例 EMPLOYEES 表是几年前创建的,我只想匹配几行。

【讨论】:

    猜你喜欢
    • 2019-10-25
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多