Hướng dẫn what is %s and %d in mysql? - % s và% d trong mysql là gì?

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 (http://api.drupal.org/api/drupal/developer ---topics ---forms_api.html/5)
This query comes from the drupal from api documentation (http://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 str

Tô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ướng dẫn what is %s and %d in mysql? - % s và% d trong mysql là gì?

Đã hỏi ngày 9 tháng 12 năm 2013 lúc 4:45Dec 9, 2013 at 4:45

Hướng dẫn what is %s and %d in mysql? - % s và% d trong mysql là gì?

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

Hướng dẫn what is %s and %d in mysql? - % s và% d trong mysql là gì?

Đã trả lời ngày 9 tháng 12 năm 2013 lúc 5:13Dec 9, 2013 at 5:13

Hướng dẫn what is %s and %d in mysql? - % s và% d trong mysql là gì?

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

Hướng dẫn what is %s and %d in mysql? - % s và% d trong mysql là gì?

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.


%S mysql làm gì?

%s là một trình giữ chỗ được sử dụng trong các chức năng như Sprintf. Kiểm tra hướng dẫn cho các giữ chỗ có thể khác. $ sql = Sprintf ($ sql, "test"); Điều này sẽ thay thế %s bằng chuỗi "kiểm tra".a placeholder used in functions like sprintf. Check the manual for other possible placeholders. $sql = sprintf($sql, "Test"); This would replace %s with the string "Test".

Kiểu dữ liệu float trong MySQL là gì?

MySQL cho phép cú pháp không tiêu chuẩn: Float (M, D) hoặc Real (M, D) hoặc Double Precision (M, D). Ở đây, (m, d) có nghĩa là các giá trị có thể được lưu trữ với tổng số các chữ số m, trong đó các chữ số d có thể là sau điểm thập phân. Ví dụ, một cột được xác định là float (7,4) được hiển thị là -999.9999.than values can be stored with up to M digits in total, of which D digits may be after the decimal point. For example, a column defined as FLOAT(7,4) is displayed as -999.9999 .

Những gì được ký kết và số nguyên không dấu trong MySQL?

Unsign chỉ có thể lưu trữ số 0 và số dương trong một cột.Nếu các giá trị trong cột không bao giờ sử dụng các số âm hoặc khi có nhu cầu sử dụng phạm vi số trên lớn hơn cho cột, bạn có thể đặt không dấu, từ đó có thể dẫn đến chỉ mục nhanh hơn.Đã ký có thể cho phép số 0, dương và số âm.. If the values in the column never use negative numbers or when there is a need in using a larger upper numeric range for the column, you can set UNSIGNED, which in turn may lead to a faster index. SIGNED can allow zero, positive, and negative numbers.

Kiểu dữ liệu số trong MySQL là gì?

MySQL hỗ trợ tất cả các loại dữ liệu số SQL tiêu chuẩn.Các loại này bao gồm các loại dữ liệu số chính xác (số nguyên, smallint, thập phân và số), cũng như các loại dữ liệu số gần đúng (float, thực và độ chính xác gấp đôi).INTEGER , SMALLINT , DECIMAL , and NUMERIC ), as well as the approximate numeric data types ( FLOAT , REAL , and DOUBLE PRECISION ).