gpt4 book ai didi

python - 在 Python 中构造一个 MySQL 更新查询,它只在字符串而不是数字周围加上引号

转载 作者:可可西里 更新时间:2023-11-01 08:31:45 25 4
gpt4 key购买 nike

我想从键和值列表构建一个更新查询,只在必要时用引号括起值。现在(使用下面的代码)引号出现在字符串和整数周围。我怎样才能有效地做到这一点?

attributes = ['filename','filesize']
media_id = 12345
sqlbase = """UPDATE media
SET %s
WHERE media_id = %s"""
setpieces = []
values = []

setpieces.append("""timestamp_modified = %s""" % (time.time()))

#Recurse through all attributes in the class
for key in attributes:
#For each key, get the value
if key in attributes:
value = getattr(self, key, None)
setpieces.append("""%s = '%s'""" % (key, value))

query = sqlbase % (', '.join(setpieces), media_id)

最佳答案

MySQLdb 通过将查询参数 传递给 execute() 来决定:

sqlbase = """UPDATE media
SET {query}
WHERE media_id = %(media_id)s"""

mapping = {key: getattr(self, key, None) for key in ['filename', 'filesize']}
mapping['media_id'] = 12345
setpieces = ["{key} = %({key})s".format(key=key) for key in mapping] + \
["timestamp_modified = %s" % time.time()]

cursor.execute(sqlbase.format(query=','.join(setpieces)), mapping)

作为奖励,您可以进行转义,这有助于防止 SQL 注入(inject)。

此外,只是一个旁注。如您所见,手动构建这样的查询看起来可读性差,而且非常脆弱。这是切换到 ORM 可能会减少麻烦和惊喜的地方,例如:Pony ORM , 或 sqlalchemy .

关于python - 在 Python 中构造一个 MySQL 更新查询,它只在字符串而不是数字周围加上引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24367547/

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