2009-08-20 29 views
30

Tôi đang cố gắng để có được Python này MYSQL cập nhật tuyên bố chính xác (Với Variables):Python MYSQL cập nhật tuyên bố

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

Bất kỳ ý tưởng nơi tôi sẽ sai?

Trả lời

61

should be:

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

Bạn có thể cũng làm điều đó với thao tác chuỗi cơ bản,

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

nhưng this way is discouraged because it leaves you open for SQL Injection. Vì quá dễ dàng (và tương tự) để làm điều đó theo cách đúng đắn tm. Làm điều đó một cách chính xác.

Điều duy nhất bạn nên cẩn thận, là một số chương trình phụ trợ cơ sở dữ liệu không tuân theo quy ước tương tự để thay thế chuỗi (SQLite xuất hiện trong đầu).

+5

Câu trả lời của Paolo tốt hơn. http://stackoverflow.com/questions/1307378/python-mysql-update-statement/1307413#1307413 – voyager

+0

Nhưng điều này sẽ làm việc với mọi phụ trợ. Phiên bản này không thực hiện bất kỳ xác nhận nào về đầu vào, trong khi cách của Paolo sẽ đảm bảo thoát khỏi nội dung của biến. – voyager

+5

Không * làm theo cách này. Bạn để lại cho mình mở rộng để tấn công SQL injection. Paulo có câu trả lời đúng, bởi vì nó đảm bảo rằng các giá trị được thoát đúng cách trước khi chuyển chúng vào db. –

42

Bạn đã có những cú pháp hoàn toàn sai:

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

Để biết thêm, read the documentation.

+3

+1 bạn đã nhanh hơn tôi :) –

+0

đây phải là câu trả lời được chấp nhận. –

10

Đây là đúng cách:

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() 

T.B. Đừng quên connect.commit() hoặc không hoạt động

+0

nó hoạt động mà không cần cam kết – emir

+0

nó không hoạt động mà không có cam kết, tôi sử dụng python 3.5 – Belter

3

Không ai trong số họ làm việc cho tôi vì một lý do nào đó.

Tôi đã tìm ra rằng vì một số lý do python không đọc% s. Vì vậy, sử dụng (?) Thay vì% S trong bạn Mã SQL.

Và cuối cùng điều này làm việc cho tôi.

cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4")) 
    cursor.commit() 
Các vấn đề liên quan