Сегодня это немного расстраивает. Я уверен, что это что-то простое, что я пропускаю. Смотрите код ниже (упрощенно, например, ради):
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_plants
и d_date
вместе образуют индекс, а acc_plants
- это значение, которое я хочу обновить / вставить.
Если в roses
существует запись в Таблица summ_plants_day
для d_date
Я хочу 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
Также я использовал %s
на основе примеров W3Schools. Я обнаружил противоречивую информацию в Интернете, пока гуглил мою проблему, это правильный / современный формат для защиты от SQL инъекции?