gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:35:09 24 4
gpt4 key购买 nike

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

可以这样应用过滤器吗?

谢谢!

最佳答案

是的,你可以做到。为了避免 sql 注入(inject),最好的方法不是使用 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))

关于Python - 使用 Python 参数对查询应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57824316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com