Bạn không thể thêm một cột vào bảng của mình với toàn bộ dữ liệu trong một bước. Bạn phải sử dụng ít nhất hai câu lệnh riêng biệt để thực hiện DDL trước (ALTER TABLE
) và DML thứ hai (UPDATE
hoặc INSERT ... ON DUPLICATE KEY UPDATE
).
Điều này có nghĩa là để thêm một cột có NOT NULL
ràng buộc yêu cầu ba bước:
- Thêm cột vô hiệu
- Điền vào cột với các giá trị trong mỗi hàng
- Thêm
NOT NULL
ràng buộc vào cột
Ngoài ra, bằng cách sử dụng giá trị mặc định "giả", bạn có thể thực hiện theo hai bước (chỉ cần lưu ý không để bất kỳ giá trị "giả" nào trôi nổi hoặc sử dụng các giá trị có ý nghĩa / được ghi chép đầy đủ):
- Thêm cột dưới dạng
NOT NULL DEFAULT ''
(hoặc sử dụng ví dụ:0
cho các kiểu số) - Điền vào cột với các giá trị trong mỗi hàng
Bạn có thể tùy chọn thay đổi lại bảng để xóa DEFAULT
giá trị. Cá nhân tôi thích phương pháp đầu tiên hơn vì nó không đưa các giá trị vô nghĩa vào bảng của bạn và có nhiều khả năng xảy ra lỗi nếu bước thứ hai có vấn đề. Tôi có thể đi với phương thức thứ hai khi một cột tự cho mình một DEFAULT
tự nhiên nhất định và tôi dự định giữ giá trị đó trong định nghĩa bảng cuối cùng.
Ngoài ra, bạn không tham số hóa chính xác truy vấn của mình; bạn nên chuyển các giá trị tham số cho phương thức thay vì định dạng đối số chuỗi bên trong lời gọi phương thức. Nói cách khác:
cursor.execute("Query with %s, %s, ...", iterable_with_values) # Do this!
cursor.execute("Query with %s, %s, ..." % iterable_with_values) # NOT this!