gpt4 book ai didi

python - mysqldb 自动添加 ' ' 到 %s

转载 作者:行者123 更新时间:2023-11-29 06:56:54 25 4
gpt4 key购买 nike

这是我的一段Python代码,probe_id是一个字符串:

sql = "select flow_id from t_static_flow where probe_id = %s"                                                                                                                  
cursor = connection.cursor()
cursor.execute(sql, (probe_id, ))

它运行良好,但是当我将上面的sql更改为

sql = "select flow_id from t_static_flow where probe_id = '%s'"

它给了我这样的错误信息:

(1064,“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行‘123’附近使用的正确语法”)

当我在 %s 周围添加 '' 时,它失败了。但为什么呢?

然后我打开mysql的general_log来查看要执行的sql。

2017-07-19T13:21:37.107960Z        85 Query     select flow_id from t_static_flow where probe_id = '123' 

这是我的第一个代码的 sql 日志,运行良好。

但我认为在第一个代码中最终的sql应该是:

select flow_id from t_static_flow where probe_id = 123

它是如何工作的?

我阅读了 MySQLdb python 代码。在执行函数中:

if args is not None:
if isinstance(args, dict):
query = query % dict((key, db.literal(item))
for key, item in args.iteritems())
else:
query = query % tuple([db.literal(item) for item in args])

我认为它不会像@money 那样做额外的工作。

最佳答案

根据详细信息,即使没有在值周围提供单引号,最终查询也会像这样
从 t_static_flow 中选择 flow_id,其中probe_id = '123'
值已经有单引号,因此当您在值周围显式添加单引号时,它会使其类似于
从 t_static_flow 中选择 flow_id,其中probe_id = ''123'' 并中断查询。

关于python - mysqldb 自动添加 ' ' 到 %s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192227/

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