在Python的SQL语句中绑定一个非固定变量[关闭]

Posted

技术标签:

【中文标题】在Python的SQL语句中绑定一个非固定变量[关闭]【英文标题】:Bind a non-fixed variable in SQL statement in Python [closed] 【发布时间】: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 parameters 和 cxOracle 的文档。 【参考方案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 表是几年前创建的,我只想匹配几行。

【讨论】:

以上是关于在Python的SQL语句中绑定一个非固定变量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在动态 SQL 的 DDL/SCL 语句中使用绑定变量?

python的pymysql中以表名作为变量传递进查询语句中

为啥我不能在立即执行语句中使用绑定变量?

在 SQL 语句中外连接绑定变量 (Oracle 11g)

Python中的非局部变量

MySQL高级特性——绑定变量