python 용 mysql 커넥터를 사용하여 SQL 테이블의 단일 셀에서 단일 값을 업데이트하려고합니다. 다음 코드를 사용하면 오류 메시지가 나타나지 않지만 테이블이 실제로 업데이트되지 않습니다. 내가 업데이트하려고 시도하는 셀의 값은 때로는 비어 있고 때로는 NULL이며 때로는 문자열을 포함합니다. 여기 내 코드 :mysql 파이썬 모듈을 사용하여 SQL 테이블 업데이트
query = ("UPDATE data_set SET %s = '%s' WHERE id = %s") % (column_to_change, change_to_value, row_id)
내가 뭘 잘못하고 있니?
편집 : 지금까지 답장 해 주셔서 감사합니다. 다른 쿼리로 비슷한 코드를 실행하는 데 효과적 이었기 때문에 주변 코드에 대한 기능적 문제 (SQL 주입 취약점에 대한 취약성 제외, 여기와 다른 곳에서)가 있다고 생각하지 않습니다. 이제 내 코드는 다음과 같습니다.
column_to_change = "column2"
change_to_value = "james"
id = "1234"
cnx = mysql.connector.connect(user='user', password='password',
host='db.website.com',
database='database')
cursor = cnx.cursor()
query = ("UPDATE data_set SET %s = %s WHERE policy_key = %s")
cursor.execute(query, (column_to_change, change_to_value, id))
cursor.close()
cnx.close()
관련성이있는 경우 삽입하려는 셀이 VARCHAR (45)로 포맷되어 있습니다. 셀에 SELECT 쿼리를 실행하면 다음과 같은 형식의 이름이 반환됩니다. (u'James ',)
change_to_value = "(u'James',)"로 설정하면 다음과 같은 오류 메시지가 나타납니다.
mysql.connector.errors.ProgrammingError : 1064 (42000) : SQL 구문에 오류가 있습니다. 'column1'= '(u \'James \ ',)'근처에서 사용할 올바른 구문을 보려면 MariaDB 서버 버전에 해당하는 매뉴얼을 확인하십시오. WHERE id = '1234'at 1 행
here를 참조하십시오! 또한'commit()'을 호출 했습니까? – mata
아니요, commit()을 호출하지 않았지만 방금 추가 했으므로 편집시 설명한 것과 같은 오류가 표시됩니다. –
쿼리 매개 변수에 매개 변수를 사용해야 할 때 식별자 (테이블 이름, 열 이름)에 매개 변수를 사용하지 않고 다른 따옴표 문자 (백틱)를 사용하므로 SQL 구문 오류가 발생합니다. – mata