Mô-đun chứa các đối tượng và chức năng hữu ích để tạo SQL động, theo cách thuận tiện và an toàn. Mã định danh SQL (e. g. tên của bảng và trường) không thể được chuyển đến phương thức như đối số truy vấn Show
# This will not work table_name = 'my_table' cur.execute("insert into %s values (%s, %s)", [table_name, 10, 20]) Chẳng hạn, truy vấn SQL phải được soạn trước khi các đối số được hợp nhất # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20]) Loại công việc này, nhưng nó là một tai nạn đang chờ để xảy ra. tên bảng có thể là một ký tự SQL không hợp lệ và cần trích dẫn; . Tên nên được thoát bằng cách sử dụng # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20]) Điều này bây giờ là an toàn, nhưng nó hơi đặc biệt. Trường hợp vì lý do nào đó cần gộp một giá trị vào chuỗi truy vấn (ngược lại như trong một giá trị) thì quy tắc gộp vẫn khác (nên dùng…). Nó cũng vẫn còn tương đối nguy hiểm. nếu # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])8 bị bỏ quên ở đâu đó, chương trình thường sẽ hoạt động, nhưng cuối cùng sẽ gặp sự cố khi có bảng hoặc tên trường có chứa các ký tự cần thoát hoặc sẽ xuất hiện một điểm yếu có khả năng bị khai thác Các đối tượng được hiển thị bởi mô-đun # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])6 cho phép tạo các câu lệnh SQL một cách nhanh chóng, tách biệt rõ ràng các phần biến của câu lệnh khỏi các tham số truy vấn from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20]) Sử dụng mô-đunThông thường, bạn nên thể hiện mẫu truy vấn của mình dưới dạng một ví dụ với các trình giữ chỗ kiểu # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])3 và sử dụng để hợp nhất các phần biến vào chúng, tất cả các phần này phải là các lớp con. Bạn vẫn có thể có các trình giữ chỗ kiểu # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])6 trong truy vấn của mình và chuyển các giá trị tới. các trình giữ chỗ giá trị như vậy sẽ không bị ảnh hưởng bởi # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])4 query = sql.SQL("select {field} from {table} where {pkey} = %s").format( field=sql.Identifier('my_name'), table=sql.Identifier('some_table'), pkey=sql.Identifier('id')) Đối tượng kết quả có nghĩa là được chuyển trực tiếp đến các phương thức con trỏ như , , nhưng cũng có thể được sử dụng để soạn truy vấn dưới dạng chuỗi Python, sử dụng phương thức # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])0 Nếu một phần truy vấn của bạn là một chuỗi các đối số có thể thay đổi, chẳng hạn như danh sách tên trường được phân tách bằng dấu phẩy, thì bạn có thể sử dụng phương thức này để chuyển chúng vào truy vấn # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])1 from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20]) 4 đối tượngCác đối tượng from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])4 nằm trong hệ thống phân cấp thừa kế sau lớp cơ sở hiển thị giao diện chung from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])7. một đoạn văn bản của một truy vấn SQL from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])7. một mã định danh PostgreSQL hoặc chuỗi các mã định danh được phân tách bằng dấu chấm from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])7. một giá trị được mã hóa cứng vào một truy vấn from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])7. một trình giữ chỗ kiểu # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])6 có giá trị sẽ được thêm vào sau e. g. qua from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])7. một chuỗi các trường hợp # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5lớp psycopg2. sql. Có thể kết hợp(được bao bọc) Lớp cơ sở trừu tượng cho các đối tượng có thể được sử dụng để soạn một chuỗi SQL Các đối tượng # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5 có thể được chuyển trực tiếp tới , thay cho chuỗi truy vấn Có thể nối các đối tượng # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5 bằng cách sử dụng toán tử # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])05. kết quả sẽ là một thể hiện chứa các đối tượng đã tham gia. Toán tử # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])07 cũng được hỗ trợ với đối số số nguyên. kết quả là một phiên bản query = sql.SQL("select {field} from {table} where {pkey} = %s").format( field=sql.Identifier('my_name'), table=sql.Identifier('some_table'), pkey=sql.Identifier('id'))8 chứa đối số bên trái được lặp lại nhiều lần theo yêu cầuas_string(bối cảnh) Trả về giá trị chuỗi của đối tượng Thông sốbối cảnh ( hoặc ) – bối cảnh để đánh giá chuỗi thành Phương thức được gọi tự động bởi , , nếu một # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5 được truyền thay vì chuỗi truy vấnlớp psycopg2. sql. SQL(chuỗi) A đại diện cho một đoạn câu lệnh SQL # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])2 hiển thị và các phương thức hữu ích để tạo mẫu để hợp nhất các phần biến của truy vấn (ví dụ: tên trường hoặc tên bảng) Chuỗi không trải qua bất kỳ hình thức thoát nào, do đó, nó không phù hợp để biểu thị các giá trị hoặc định danh biến. bạn chỉ nên sử dụng nó để chuyển các chuỗi không đổi biểu thị các mẫu hoặc đoạn trích câu lệnh SQL; Ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])8chuỗi Chuỗi được bọc bởi đối tượng # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])2định dạng(*args , **kwargs) Hợp nhất các đối tượng vào một mẫu Thông số
sự kết hợp của chuỗi # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])2 với các trình giữ chỗ được thay thếloại trả lại Phương pháp này tương tự như phương pháp Python # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])89. mẫu chuỗi hỗ trợ các trình giữ chỗ được đánh số tự động ( # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])3), được đánh số ( # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])83, # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])84…) và các trình giữ chỗ được đặt tên ( # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])86), với các đối số vị trí thay thế các trình giữ chỗ được đánh số và các từ khóa thay thế các từ khóa được đặt tên. Tuy nhiên, công cụ sửa đổi trình giữ chỗ (______404, # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])05) không được hỗ trợ. Chỉ có thể chuyển đối tượng # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5 vào mẫu Ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])0tham gia(seq) Tham gia một chuỗi Thông sốseq (có thể lặp lại của # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5) – các phần tử để tham gia Sử dụng chuỗi của đối tượng # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])2 để phân tách các phần tử trong seq. Lưu ý rằng các đối tượng cũng có thể lặp lại, vì vậy chúng có thể được sử dụng làm đối số cho phương thức này Ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])6lớp psycopg2. sql. Số nhận dạng(*chuỗi) A đại diện cho một mã định danh SQL hoặc một chuỗi được phân tách bằng dấu chấm Định danh thường đại diện cho tên của các đối tượng cơ sở dữ liệu, chẳng hạn như bảng hoặc trường. Các mã định danh PostgreSQL tuân theo các ký tự chuỗi SQL để thoát (e. g. họ sử dụng dấu ngoặc kép thay vì dấu ngoặc đơn) Ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])0 Nhiều chuỗi có thể được chuyển đến đối tượng để đại diện cho một tên đủ điều kiện, tôi. e. một chuỗi các mã định danh được phân tách bằng dấu chấm Ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])1 Đã thay đổi trong phiên bản 2. 8. đã thêm hỗ trợ cho nhiều chuỗi. dâyMột bộ với các chuỗi được bao bọc bởi Mới trong phiên bản 2. 8. các phiên bản trước chỉ có thuộc tính ________ 463. Thuộc tính vẫn tồn tại nhưng không được dùng nữa và sẽ chỉ hoạt động nếu ________ 90 kết thúc một chuỗi đơn. lớp psycopg2. sql. Chữ(được bao bọc)A đại diện cho một giá trị SQL để đưa vào truy vấn Thông thường, bạn sẽ muốn bao gồm các trình giữ chỗ trong truy vấn và chuyển các giá trị làm đối số. Tuy nhiên, nếu bạn thực sự cần bao gồm một giá trị bằng chữ trong truy vấn, bạn có thể sử dụng đối tượng này Chuỗi được trả về bởi from psycopg2 import sql cur.execute( sql.SQL("insert into {} values (%s, %s)") .format(sql.Identifier('my_table')), [10, 20])2 theo quy luật đối với các đối tượng Python Ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])2bọc Đối tượng được bọc bởi query = sql.SQL("select {field} from {table} where {pkey} = %s").format( field=sql.Identifier('my_name'), table=sql.Identifier('some_table'), pkey=sql.Identifier('id'))2lớp psycopg2. sql. Giữ chỗ(tên=Không có) A đại diện cho một trình giữ chỗ cho các tham số truy vấn Nếu tên được chỉ định, hãy tạo một trình giữ chỗ có tên (e. g. # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])00), nếu không thì tạo một trình giữ chỗ vị trí (e. g. # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])6) Đối tượng rất hữu ích để tạo các truy vấn SQL với số lượng đối số thay đổi ví dụ # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % table_name, [10, 20])3Tên Tên của query = sql.SQL("select {field} from {table} where {pkey} = %s").format( field=sql.Identifier('my_name'), table=sql.Identifier('some_table'), pkey=sql.Identifier('id'))4lớp psycopg2. sql. Sáng tác(seq) Một đối tượng được tạo thành từ một chuỗi # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5 Đối tượng thường được tạo bằng cách sử dụng các phương thức và toán tử # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5. Tuy nhiên, có thể tạo một query = sql.SQL("select {field} from {table} where {pkey} = %s").format( field=sql.Identifier('my_name'), table=sql.Identifier('some_table'), pkey=sql.Identifier('id'))8 chỉ định trực tiếp một chuỗi # This works, but it is not optimal table_name = 'my_table' cur.execute( "insert into %s values (%%s, %%s)" % ext.quote_ident(table_name, cur), [10, 20])5 làm đối số Làm cách nào để phân tích cú pháp truy vấn SQL trong Python?Bắt đầu nhanh. >>> nhập sqlparse >>> # Tách một chuỗi chứa hai câu lệnh SQL. >>> raw = 'chọn * từ foo; .
Bạn sẽ định dạng truy vấn của mình trong SQL như thế nào?Chọn Chỉnh sửa -> Trình định dạng SQL -> Định dạng truy vấn đã chọn (hoặc nhấn Ctrl+F12) . -- Định dạng Tất cả Truy vấn. Để định dạng toàn bộ lô truy vấn được nhập trong cửa sổ SQL. Chọn Định dạng -> Trình định dạng SQL -> Định dạng Tất cả Truy vấn (hoặc nhấn Shift + F12).
Làm cách nào để xây dựng truy vấn SQL trong Python?Truy vấn SQL trong Python . Bước 1. Nhập SQLAlchemy và Pandas. Hãy bắt đầu với việc nhập thư viện sqlalchemy. . Bước 2. Tạo một công cụ SQL. Chúng tôi tạo một công cụ SQL bằng cách sử dụng lệnh tạo một lớp mới '. . Bước 3 — Chạy truy vấn bằng câu lệnh SQL. . Bước 4 — Viết thư cho DB. . Bước 5— Tạo bảng trong DB Làm cách nào để định dạng chuỗi trong SQL?Trong SQL Server, hàm FORMAT() cho phép bạn định dạng giá trị ngày/giờ và số dưới dạng chuỗi được định dạng bằng cách chuyển vào "chuỗi định dạng" làm đối số thứ hai< . Đây là một ví dụ về chức năng này đang hoạt động. ĐỊNH DẠNG(@date, 'dd/MM/yyyy'); (the first argument is the value that's being formatted). Here's an example of this function in action: FORMAT(@date, 'dd/MM/yyyy'); |