在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 语句中使用绑定变量?