Bởi Guatebus vào ngày 11 tháng 9 năm 2009 lúc 18:22 UTC
Xin chào, bất cứ ai cũng có thể giải thích những gì mà %D và ' %S' có nghĩa là gì trong truy vấn MySQL như thế này:
db_query("INSERT INTO {table} (name, log, hidden) VALUES ('%s', %d, '%s')", $form_values['name'], $form_values['access']['log'], $form_values['hidden']);
Bất kỳ tài liệu liên quan cũng sẽ được giúp đỡ rất nhiều. Tìm kiếm trên web, nhưng không tìm thấy nhiều. Truy vấn này đến từ Drupal từ tài liệu API (//api.drupal.org/api/drupal/developer ---topics ---forms_api.html/5)
This query comes from the drupal from api documentation
(//api.drupal.org/api/drupal/developer--topics--forms_api.html/5)
Cảm ơn vì bất kì sự giúp đỡ
Precursor:
MySQL Table created via: CREATE TABLE table(Id INT PRIMARY KEY NOT NULL, Param1 VARCHAR(50))Function:
.execute("INSERT INTO table VALUES(%d,%s)", (int(id), string)Output:
TypeError: %d format: a number is required, not a strTôi không chắc những gì đang xảy ra ở đây hoặc tại sao tôi không thể thực thi lệnh. Điều này đang sử dụng MySQLDB trong Python. .execute được thực hiện trên một đối tượng con trỏ.
CHỈNH SỬA:
Câu hỏi: Các vấn đề của Python MySQLDB (kiểu mẫu: %D định dạng: Một số là bắt buộc, không phải str) nói rằng bạn phải sử dụng %s cho tất cả các trường. Tại sao điều này có thể là? Tại sao lệnh này hoạt động?
.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string)
Đã hỏi ngày 9 tháng 12 năm 2013 lúc 4:45Dec 9, 2013 at 4:45
1
Vì toàn bộ truy vấn cần phải ở định dạng chuỗi trong khi thực hiện truy vấn nên nên sử dụng %s ...
Sau khi truy vấn được thực thi giá trị nguyên được giữ lại.
Vì vậy, dòng của bạn nên được.
.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string))Giải thích là ở đây
Đã trả lời ngày 9 tháng 12 năm 2013 lúc 5:13Dec 9, 2013 at 5:13
Xorxorxor
2.59827 Huy hiệu bạc41 Huy hiệu đồng27 silver badges41 bronze badges
4
Chuỗi định dạng không thực sự là một chuỗi định dạng Python bình thường. Bạn phải luôn sử dụng %s cho tất cả các trường
Đã trả lời ngày 17 tháng 8 năm 2017 lúc 15:50Aug 17, 2017 at 15:50
Lwzhuolwzhuolwzhuo
3042 Huy hiệu bạc6 Huy hiệu Đồng2 silver badges6 bronze badges
Tôi đã tìm thấy một giải pháp trên dev.mysql.com. Nói tóm lại, sử dụng .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 1, không phải .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 2 trong tham số thứ hai là .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 3:
add_salary = ("INSERT INTO salaries " "(emp_no, salary, from_date, to_date) " "VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)") data_salary = { 'emp_no': emp_no, 'salary': 50000, 'from_date': tomorrow, 'to_date': date(9999, 1, 1), } cursor.execute(add_salary, data_salary)
Đã trả lời ngày 4 tháng 4 năm 2020 lúc 17:52Apr 4, 2020 at 17:52
Bạn đã bỏ lỡ một .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 4 trong định dạng chuỗi
"(INSERT INTO table VALUES(%d,%s)"%(int(id), string))Đã trả lời ngày 9 tháng 12 năm 2013 lúc 5:15Dec 9, 2013 at 5:15
AROVITAROVITArovit
3.3775 Huy hiệu vàng19 Huy hiệu bạc23 Huy hiệu đồng5 gold badges19 silver badges23 bronze badges
3
Chương 11 Kiểu dữ liệu
MySQL hỗ trợ các loại dữ liệu SQL trong một số loại: loại số, loại ngày và thời gian, loại chuỗi (ký tự và byte), loại không gian và loại dữ liệu .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 5. Chương này cung cấp một cái nhìn tổng quan và mô tả chi tiết hơn về các thuộc tính của các loại trong mỗi loại và tóm tắt các yêu cầu lưu trữ kiểu dữ liệu. Các tổng quan ban đầu được cố ý ngắn gọn. Tham khảo các mô tả chi tiết hơn để biết thêm thông tin về các loại dữ liệu cụ thể, chẳng hạn như các định dạng cho phép trong đó bạn có thể chỉ định các giá trị.
Mô tả kiểu dữ liệu Sử dụng các quy ước này:
Đối với các loại số nguyên, .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 6 cho biết độ rộng hiển thị tối đa. Đối với các loại điểm nổi và điểm cố định, .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 6 là tổng số chữ số có thể được lưu trữ (độ chính xác). Đối với các loại chuỗi, .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 6 là độ dài tối đa. Giá trị tối đa cho phép của .execute("INSERT INTO table VALUES(%d,%s)", (int(id), string) 6 phụ thuộc vào kiểu dữ liệu.
TypeError: %d format: a number is required, not a str 0 áp dụng cho các loại điểm nổi và điểm cố định và chỉ ra số lượng các chữ số theo điểm thập phân (tỷ lệ). Giá trị tối đa có thể là 30, nhưng không nên lớn hơn ____ 16−2.
TypeError: %d format: a number is required, not a str 2 áp dụng cho các loại TypeError: %d format: a number is required, not a str 3, TypeError: %d format: a number is required, not a str 4 và TypeError: %d format: a number is required, not a str 5 và biểu thị độ chính xác giây của phân số; Đó là, số lượng các chữ số theo điểm thập phân cho các phần phân số của giây. Giá trị TypeError: %d format: a number is required, not a str 2, nếu được đưa ra, phải nằm trong phạm vi 0 đến 6. Giá trị 0 biểu thị rằng không có phần phân số. Nếu bị bỏ qua, độ chính xác mặc định là 0. (điều này khác với mặc định SQL tiêu chuẩn là 6, để tương thích với các phiên bản MySQL trước đó.)
Dấu ngoặc vuông (TypeError: %d format: a number is required, not a str 7 và TypeError: %d format: a number is required, not a str 8) cho biết các phần tùy chọn của định nghĩa loại.