Это работает, когда я заменяю переменную столбца фактическим именем столбца. Однако мне нужна переменная. Когда я использую переменную, я получаю синтаксическую ошибку MySQL. Может ли поле быть переменной? Если да, то где ошибка?Использование переменной в качестве имени поля в MySQLdb, Python 2.7
conn = self.create_connection()
cur = conn[0]
db = conn[1]
cur.execute('''
UPDATE coefficients
SET %s = %s
WHERE coef_id = %s
''' , (sql_col_name, fgi, ici))
db.commit()
Ok вот отслеживающий:
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''base_rpm' = 3500 WHERE coef_id = 460' at line 1")
Я не использовал MySQLdb, но я использовал psycopg2 с базой данных Redshift и использовал переменные в инструкции sql там, вам нужно определить строку sql и передать строку sql команде execute. Пример: 'SQL = "Коэффициенты обновления SET% S% S = Где coef_id =% s"' ' cur.execute (SQL)' Если он не был определен таким образом буквальным '% s 'был передан в запрос. – Bob
Я не буду публиковать как ответ, поскольку я чувствую себя некомфортно, делая это сам в SQLite (я чувствую, что это взломанно, и, возможно, я получу слишком, если кто-то скажет мне, что я ошибаюсь ...), но вы можете сформировать запрос отдельно например 'query =" UPDATE something SET {} =% s ".format ('hello')', а затем 'print query% 'goodbye''. В этом случае использование 'format' не влияет на'% s' в вашей предварительно сформированной строке, поэтому вы создаете ее в двух частях. – roganjosh
Я не могу отредактировать свой предыдущий комментарий, но, конечно, чтобы получить переменные в строке, вам понадобится что-то подобное в вашем заявлении sql. 'sql =" Обновить коэффициенты SET {1} = {2} WHERE coef_id = {3} ". Format (sql_col_name, fgi, ici)' Или любые методы форматирования, которые вы предпочитаете, до тех пор, пока вы добавляете их в Струна. – Bob