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))
我有一个脚本可以在 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))