gpt4 book ai didi

Python UpSert - 参数不足

转载 作者:行者123 更新时间:2023-12-02 02:59:31 28 4
gpt4 key购买 nike

今天这有点令人沮丧。我确定它很简单,我忽略了。请参阅下面的代码(为了示例而简化):

def dbUpsert(sqlQuery, sqlValues):
# Connect to the database
connection = pymysql.connect(host='localhost',
user='db_user',
password='###',
db='garden',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
# Create a new record
cursor.execute(sqlQuery, sqlValues)
# Commit the changes
connection.commit()
finally:
connection.close()


sqlValues = real_plants, datetime.datetime.today().strftime('%Y-%m-%d'), 10
print (sqlValues)
##### Output: ('roses', '2020-02-19', 10)

sqlQuery = """
INSERT INTO summ_plants_day
(
real_plants, d_date, acc_plants
)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE
real_plants = %s,
d_date = %s,
acc_plants = %s
"""
dbUpsert(sqlQuery, sqlValues)

在我的数据库中,我有 4 列。一种是自增主键,real_plantsd_date一起组成一个索引,acc_plants就是我要更新/插入的值。

如果 roses 的条目存在于 d_date 的表 summ_plants_day 中,我想 UPDATE,否则我想要INSERT

这里是错误:

Traceback (most recent call last):
in dbUpsert
cursor.execute(sqlQuery, sqlValues)
in execute
query = self.mogrify(query, args)
in mogrify
query = query % self._escape_args(args, conn)
TypeError: not enough arguments for format string

此外,我根据 W3Schools 示例使用了 %s。在谷歌搜索我的问题时,我在网上看到了相互矛盾的信息,这种适当/现代的格式是否可以防止 SQL 注入(inject)?

最佳答案

我建议在 ON DUPLICATE KEY UPDATE 子句中使用 VALUES() 语法。这避免了两次传递同一个变量的需要,因此它应该可以很好地与您现有的代码一起工作:

INSERT INTO summ_plants_day (real_plants, d_date, acc_plants)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE
real_plants = VALUES(real_plants),
d_date = VALUES(d_date),
acc_plants = VALUES(acc_plants)

关于Python UpSert - 参数不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60309634/

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