Truy vấn SQL định dạng Python

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

# 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ô-đun

Thô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ượng

Cá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])
5

lớ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ầu

as_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ấn

lớ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])
8

chuỗ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ố
  • args () – các tham số để thay thế cho các trình giữ chỗ đượ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) hoặc được đánh số tự động (_______23)

  • kwargs () – các tham số để thay thế cho các trình giữ chỗ có 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)

trả lại

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])
0

tham 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])
6

lớ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ây

Mộ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])
2

bọ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'))
2

lớ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])
3

Tê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'))
4

lớ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');