Python - 使用 Python 参数对查询应用过滤器

Python - Apply a filter on query using a Python Parameter

我有一个脚本可以在 MySQL 上查询我的数据库。我怀疑我是否可以通过 Python.

将任何参数传递给该查询

例如,在以下脚本中,我想使用 Python 计算 date_filter,然后在查询中应用该过滤器。

now = dt.datetime.now()
date_filter = now - timedelta(days=3)

dq_connection = mysql.connector.connect(user='user', password='pass', host='localhost', database='db')
engine = create_engine('localhost/db')
cursor = connection.cursor(buffered=True)
query = ('''
SELECT *
FROM myTable
WHERE date >= ''' + date_filter + '''
''')

我用这种方式尝试,但出现以下错误:

builtins.TypeError: can only concatenate str (not "datetime.datetime") to str

可以这样应用过滤器吗?

谢谢!

你可以做类似的事情:

WHERE date >= ''' + str(date_filter) + '''

将日期表示为字符串而不是日期时间对象。

你可以试试这个:

date_f = str(date_filter)

query = ('''
SELECT *
FROM myTable
WHERE date >= "{}"
'''.format(date_f))

是的,你可以做到。为避免 sql 注入,最好的方法是不使用 python 格式化工具,而是使用 sql 参数和占位符(请注意,您不需要像占位符那样使用单引号 '作业并转换变量的类型):

now = dt.datetime.now()
date_filter = now - timedelta(days=3)

dq_connection = mysql.connector.connect(user='user', password='pass', host='localhost', database='db')
engine = create_engine('localhost/db')
cursor = db_connection.cursor(buffered=True)
query = "SELECT * FROM myTable WHERE date >=%s"
cursor.execute(query,(date_filter,))

另外,你的光标有误,应该是db_connection.cursor。 date_filter 后面的最后一个逗号是可以的,因为你需要发送一个元组。 如果您需要多个参数,您可以放置​​多个占位符:

query = "SELECT * FROM myTable WHERE date >=%s and date<=%s"
cursor.execute(query,(date_filter,other_date))