2009-08-20 2 views

답변

61

:

cursor.execute (""" 
    UPDATE tblTableName 
    SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s 
    WHERE Server=%s 
""", (Year, Month, Day, Hour, Minute, ServerID)) 

당신은 또한 기본 문자열 조작 함께 할 수

cursor.execute ("UPDATE tblTableName SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s WHERE Server='%s' " % (Year, Month, Day, Hour, Minute, ServerID)) 

하지만 this way is discouraged because it leaves you open for SQL Injection. 너무 쉽게 (그리고 이와 유사한) 올바른 방법으로tm. 올바르게하십시오.

주의해야 할 점은 일부 데이터베이스 백엔드가 문자열 교체에 대한 동일한 규칙을 따르지 않는다는 것입니다 (SQLite가 마음에 듭니다). 자세한 내용은

cursor.execute (""" 
    UPDATE tblTableName 
    SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s 
    WHERE Server=%s 
""", (Year, Month, Day, Hour, Minute, ServerID)) 

, read the documentation :

+5

파올로의 대답이 좋습니다. http://stackoverflow.com/questions/1307378/python-mysql-update-statement/1307413#1307413 – voyager

+0

하지만이 코드는 모든 백엔드에서 작동합니다. 이 버전은 입력에 대한 유효성 검사를 수행하지 않지만 Paolo의 방법은 변수 내용을 이스케이프 처리합니다. – voyager

+5

이렇게하면 안됩니다. 당신은 SQL 주입 공격에 대해 열어 두었습니다. Paulo는 db에 값을 전달하기 전에 값이 올바르게 이스케이프 처리되도록하기 때문에 올바른 대답을 제공합니다. –

42

당신은 구문 모든 잘못을 가지고있다.

+3

+1 당신이 나보다 빠릅니다. –

+0

이것은 대답이되어야합니다. –

10

이 올바른 방법입니다 :

import MySQLdb 

if __name__ == '__main__': 
    connect = MySQLdb.connect(host="localhost", port=3306, 
           user="xxx", passwd="xxx", db='xxx', charset='utf8') 

    cursor = connect.cursor() 

    cursor.execute(""" 
     UPDATE tblTableName 
     SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s 
     WHERE Server=%s 
    """, (Year, Month, Day, Hour, Minute, ServerID)) 

    connect.commit() 
    connect.close() 

P.S. connect.commit()을 잊지 마세요. 그렇지 않으면 작동하지 않습니다.

+0

커밋없이 작동 – emir

+0

커밋하지 않으면 작동하지 않습니다. 파이썬 3.5를 사용합니다. – Belter

3

어떤 이유로 든 나를 위해 일하지 않았습니다.

나는 파이썬이 % s을 (를) 읽지 못한다는 것을 알아 냈습니다. 그래서 당신은 SQL 코드에서 % S 대신 (?)을 사용하십시오.

그리고 마침내 이것은 나를 위해 일했습니다.

cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4")) 
    cursor.commit()