Hướng dẫn how do you create a multiline query in python? - làm cách nào để bạn tạo một truy vấn nhiều dòng trong python?

Tôi đang cố gắng tìm cách tốt nhất để định dạng chuỗi truy vấn SQL. Khi tôi gỡ lỗi ứng dụng của mình, tôi muốn đăng nhập để nộp tất cả các chuỗi truy vấn SQL và điều quan trọng là chuỗi được định dạng đúng.

lựa chọn 1

def myquery():
    sql = "select field1, field2, field3, field4 from table where condition1=1 and condition2=2"
    con = mymodule.get_connection()
    ...
  • Điều này là tốt để in chuỗi SQL.
  • Nó không phải là một giải pháp tốt nếu chuỗi dài và không phù hợp với chiều rộng tiêu chuẩn của 80 ký tự.

Lựa chọn 2

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
  • Ở đây mã rõ ràng nhưng khi bạn in chuỗi truy vấn SQL, bạn sẽ nhận được tất cả các không gian trắng khó chịu này.

    u '\ nselect field1, field2, field3, field4 \ n _____ từ bảng \ n ____ trong đó điều kiện1 = 1 \ n _____ và điều kiện2 = 2'____from table\n____where condition1=1 \n_____and condition2=2'

Lưu ý: Tôi đã thay thế các không gian trắng bằng dấu gạch dưới

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
4, vì chúng được cắt bởi trình soạn thảo

Tùy chọn 3

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
  • Tôi không thích tùy chọn này vì nó phá vỡ sự rõ ràng của mã được lập bảng tốt.

Tùy chọn 4

def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
  • Tôi không thích tùy chọn này bởi vì tất cả các gõ thêm trong mỗi dòng và cũng khó chỉnh sửa truy vấn.

Đối với tôi, giải pháp tốt nhất sẽ là Tùy chọn 2 nhưng tôi không thích thêm khoảng trắng khi tôi in chuỗi SQL.Option 2 but I don't like the extra whitespaces when I print the sql string.

Bạn có biết bất kỳ lựa chọn nào khác không?

Hướng dẫn how do you create a multiline query in python? - làm cách nào để bạn tạo một truy vấn nhiều dòng trong python?

Douglas

Phim huy hiệu vàng 35,8k88 gold badges73 silver badges89 bronze badges

hỏi ngày 9 tháng 3 năm 2011 lúc 9:20Mar 9, 2011 at 9:20

3

Xin lỗi vì đã đăng lên một chủ đề cũ như vậy - nhưng là một người cũng có chung niềm đam mê với 'tốt nhất', tôi nghĩ tôi sẽ chia sẻ giải pháp của chúng tôi.

Giải pháp là xây dựng các câu lệnh SQL bằng cách kết hợp theo nghĩa đen của Python (http://docs.python.org/), có thể đủ điều kiện ở đâu đó giữa tùy chọn 2 và tùy chọn 4

Mẫu mã:

sql = ("SELECT field1, field2, field3, field4 "
       "FROM table "
       "WHERE condition1=1 "
       "AND condition2=2;")

Cũng hoạt động với F-String:

fields = "field1, field2, field3, field4"
table = "table"
conditions = "condition1=1 AND condition2=2"

sql = (f"SELECT {fields} "
       f"FROM {table} "
       f"WHERE {conditions};")

Pros:

  1. Nó giữ lại định dạng 'được lập bảng' ', nhưng không thêm các ký tự không gian bên ngoài (gây ô nhiễm ghi nhật ký).
  2. Nó tránh được sự xấu xí tiếp tục dấu vết của tùy chọn 4, điều này gây khó khăn cho việc thêm các tuyên bố (không đề cập đến mù không gian trắng).
  3. Và hơn nữa, thực sự đơn giản để mở rộng tuyên bố trong VIM (chỉ cần đặt con trỏ vào điểm chèn và nhấn Shift-O để mở một dòng mới).

Hướng dẫn how do you create a multiline query in python? - làm cách nào để bạn tạo một truy vấn nhiều dòng trong python?

GG.

Huy hiệu vàng 20K1379 Huy hiệu bạc127 Huy hiệu đồng13 gold badges79 silver badges127 bronze badges

Đã trả lời ngày 24 tháng 2 năm 2012 lúc 15:42Feb 24, 2012 at 15:42

user590028user590028user590028

Huy hiệu vàng 11K338 Huy hiệu bạc56 Huy hiệu đồng3 gold badges38 silver badges56 bronze badges

6

Rõ ràng bạn đã xem xét rất nhiều cách để viết SQL sao cho nó in ra, nhưng làm thế nào về việc thay đổi câu lệnh 'in' mà bạn sử dụng để ghi nhật ký, thay vì viết SQL của bạn theo những cách bạn không thích? Sử dụng tùy chọn yêu thích của bạn ở trên, làm thế nào về một chức năng ghi nhật ký như thế này:

def debugLogSQL(sql):
     print ' '.join([line.strip() for line in sql.splitlines()]).strip()

sql = """
    select field1, field2, field3, field4
    from table"""
if debug:
    debugLogSQL(sql)

Điều này cũng sẽ làm cho nó tầm thường để thêm logic bổ sung để phân chia chuỗi được ghi lại trên nhiều dòng nếu dòng dài hơn độ dài mong muốn của bạn.

Đã trả lời ngày 9 tháng 3 năm 2011 lúc 9:55Mar 9, 2011 at 9:55

CDLKCDLKcdlk

5363 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges

Cách sạch nhất mà tôi đã đi qua được truyền cảm hứng từ Hướng dẫn kiểu SQL.

sql = """
    SELECT field1, field2, field3, field4
      FROM table
     WHERE condition1 = 1
       AND condition2 = 2;
"""

Về cơ bản, các từ khóa bắt đầu một mệnh đề nên được liên kết đúng và tên trường, v.v., nên được căn chỉnh. Điều này trông rất gọn gàng và cũng dễ dàng gỡ lỗi hơn.

Đã trả lời ngày 20 tháng 1 năm 2016 lúc 8:29Jan 20, 2016 at 8:29

aandisaandisaandis

3.7834 huy hiệu vàng27 Huy hiệu bạc39 Huy hiệu đồng4 gold badges27 silver badges39 bronze badges

1

Sử dụng thư viện 'SQLParse', chúng tôi có thể định dạng các SQLS.

>>> import sqlparse
>>> raw = 'select * from foo; select * from bar;'
>>> print(sqlparse.format(raw, reindent=True, keyword_case='upper'))
SELECT *
FROM foo;

SELECT *
FROM bar;

Tham khảo: https://pypi.org/project/sqlparse/

Đã trả lời ngày 10 tháng 12 năm 2020 lúc 5:58Dec 10, 2020 at 5:58

Hướng dẫn how do you create a multiline query in python? - làm cách nào để bạn tạo một truy vấn nhiều dòng trong python?

Fazal sfazal sFazal S

1211 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

sql = ("select field1, field2, field3, field4 "
       "from table "
       "where condition1={} "
       "and condition2={}").format(1, 2)

Output: 'select field1, field2, field3, field4 from table 
         where condition1=1 and condition2=2'

Nếu giá trị của điều kiện phải là một chuỗi, bạn có thể làm như thế này:

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
0

Đã trả lời ngày 12 tháng 5 năm 2016 lúc 12:01May 12, 2016 at 12:01

Hướng dẫn how do you create a multiline query in python? - làm cách nào để bạn tạo một truy vấn nhiều dòng trong python?

Pangpangpangpangpangpang

8.32311 Huy hiệu vàng59 Huy hiệu bạc95 Huy hiệu Đồng11 gold badges59 silver badges95 bronze badges

3

Bạn có thể sử dụng

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
5 để định dạng độc đáo câu lệnh SQL được in.

Điều này hoạt động rất tốt với tùy chọn 2 của bạn.option 2.

Lưu ý:

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
6 chỉ để chứng minh các dòng trống siêu dữ liệu nếu bạn không sử dụng CleanDoc.

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
1

Output:

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
2

Từ các tài liệu:

inspect.cleandoc(doc)

Làm sạch thụt vào từ các tài liệu được thụt vào để xếp hàng với các khối mã.

Tất cả khoảng trắng hàng đầu được loại bỏ khỏi dòng đầu tiên. Bất kỳ khoảng trắng nào có thể được loại bỏ đồng đều khỏi dòng thứ hai trở đi đều được loại bỏ. Các dòng trống ở đầu và cuối sau đó được loại bỏ. Ngoài ra, tất cả các tab được mở rộng đến không gian.

Đã trả lời ngày 9 tháng 11 năm 2020 lúc 8:27Nov 9, 2020 at 8:27

Hướng dẫn how do you create a multiline query in python? - làm cách nào để bạn tạo một truy vấn nhiều dòng trong python?

Mike Scottymike ScottyMike Scotty

10,2K5 Huy hiệu vàng37 Huy hiệu bạc47 Huy hiệu đồng5 gold badges37 silver badges47 bronze badges

Đây là phiên bản sửa đổi một chút của câu trả lời @aandis. Khi nói đến chuỗi RAW, ký tự tiền tố 'r' trước chuỗi. Ví dụ:

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
3

Điều này được khuyến nghị khi truy vấn của bạn có bất kỳ ký tự đặc biệt nào như '\' yêu cầu thoát khỏi các công cụ thoát và xơ vải như Flake8 báo cáo nó là lỗi.

Đã trả lời ngày 27 tháng 1 năm 2021 lúc 6:03Jan 27, 2021 at 6:03

Akhiakhiakhi

6241 Huy hiệu vàng10 Huy hiệu bạc23 Huy hiệu đồng1 gold badge10 silver badges23 bronze badges

Hướng dẫn kiểu Google: https://google.github.io/styleguide/pyguide#310-strings

Các chuỗi đa dòng không chảy với sự thụt của phần còn lại của chương trình. Nếu bạn cần tránh nhúng thêm không gian vào chuỗi, hãy sử dụng chuỗi một dòng được nối hoặc một chuỗi đa dòng với

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
7 để xóa không gian ban đầu trên mỗi dòng:

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
4

Chuỗi có thể được bao quanh trong một cặp ba lần kết hợp:

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
8 hoặc
def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
9. Kết thúc các dòng không cần phải thoát ra khi sử dụng ba quote, nhưng chúng sẽ được bao gồm trong chuỗi. Có thể ngăn chặn sự kết thúc của ký tự dòng bằng cách thêm
def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
0 ở cuối dòng.

Sau đây sử dụng một lối thoát để tránh một đường trống ban đầu không mong muốn.

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
5

Vì vậy, tùy chọn 2 đã sửa đổi:

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
6

def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
1:

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
7

Đã trả lời ngày 22 tháng 3 lúc 8:13Mar 22 at 8:13

Demzthe DemzThe Demz

6.8865 huy hiệu vàng37 Huy hiệu bạc42 Huy hiệu đồng5 gold badges37 silver badges42 bronze badges

Để tránh định dạng hoàn toàn, tôi nghĩ rằng một giải pháp tuyệt vời là sử dụng các thủ tục.formatting entirely, I think a great solution is to use procedures.

Gọi một thủ tục cung cấp cho bạn kết quả của bất kỳ truy vấn nào bạn muốn đưa vào quy trình này. Bạn thực sự có thể xử lý nhiều truy vấn trong một thủ tục. Cuộc gọi sẽ chỉ trả lại truy vấn cuối cùng được gọi.result of whatever query you want to put in this procedure. You can actually process multiple queries within a procedure. The call will just return the last query that was called.

Mysql

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
8

Python

def query():
    sql = """
        select field1, field2, field3, field4
        from table
        where condition1=1
        and condition2=2"""
    con = mymodule.get_connection()
    ...
9

Đã trả lời ngày 13 tháng 12 năm 2018 lúc 11:40Dec 13, 2018 at 11:40

ParoofkeyparoofkeyParoofkey

Huy hiệu đồng bạc 2011 7 Huy hiệu đồng1 silver badge11 bronze badges

Đã trả lời ngày 18 tháng 5 lúc 17:06May 18 at 17:06

MORTEZAMORTEZAmorteza

3054 Huy hiệu bạc15 Huy hiệu Đồng4 silver badges15 bronze badges

Bạn có thể đặt tên trường vào một mảng "trường", và sau đó:

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
0

Đã trả lời ngày 9 tháng 3 năm 2011 lúc 9:23Mar 9, 2011 at 9:23

jcomeau_ictxjcomeau_ictxjcomeau_ictx

37K6 Huy hiệu vàng92 Huy hiệu bạc102 Huy hiệu Đồng6 gold badges92 silver badges102 bronze badges

3

Tôi sẽ đề nghị gắn bó với tùy chọn 2 (Tôi luôn sử dụng nó cho các truy vấn phức tạp hơn

def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
2) và nếu bạn muốn in nó theo một cách hay, bạn luôn có thể sử dụng một mô -đun riêng.

Đã trả lời ngày 9 tháng 3 năm 2011 lúc 9:40Mar 9, 2011 at 9:40

Đối với các truy vấn ngắn có thể phù hợp với một hoặc hai dòng, tôi sử dụng giải pháp theo nghĩa đen trong giải pháp được chọn trên cùng ở trên. Đối với các truy vấn dài hơn, tôi chia chúng thành các tệp

def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
3. Sau đó tôi sử dụng hàm trình bao bọc để tải tệp và thực thi tập lệnh, một cái gì đó như:

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
1

Tất nhiên điều này thường sống trong một lớp học nên tôi thường không phải vượt qua

def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
4 một cách rõ ràng. Tôi cũng thường sử dụng
def query():
    sql = "select field1, field2, field3, field4 " \
          "from table " \
          "where condition1=1 " \
          "and condition2=2 "
    con = mymodule.get_connection()    
    ...
5, nhưng điều này có ý tưởng chung. Sau đó, các tập lệnh SQL hoàn toàn khép kín trong các tệp của riêng họ với sự tô sáng cú pháp của riêng họ.

Đã trả lời ngày 17 tháng 12 năm 2013 lúc 15:31Dec 17, 2013 at 15:31

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
2

[Chỉnh sửa bằng nhận xét để nhận xét] Có một chuỗi SQL bên trong một phương thức không có nghĩa là bạn phải "lập bảng" nó:
Having an SQL string inside a method does NOT mean that you have to "tabulate" it:

def query():
    sql = """select field1, field2, field3, field4
from table
where condition1=1
and condition2=2"""
    con = mymodule.get_connection()
    ...
3

Đã trả lời ngày 9 tháng 3 năm 2011 lúc 9:30Mar 9, 2011 at 9:30

John Machinjohn MachinJohn Machin

79,8K11 Huy hiệu vàng138 Huy hiệu bạc185 Huy hiệu đồng11 gold badges138 silver badges185 bronze badges

6

Multiline ở Python là gì?

Một chuỗi đa dòng trong Python bắt đầu và kết thúc bằng ba trích dẫn đơn hoặc ba trích dẫn kép. Bất kỳ trích dẫn, tab hoặc dòng mới nào ở giữa Triple Trích dẫn Triple Trích dẫn được coi là một phần của chuỗi. Quy tắc thụt của Python cho các khối không áp dụng cho các dòng bên trong chuỗi đa dòng.begins and ends with either three single quotes or three double quotes. Any quotes, tabs, or newlines in between the “triple quotes” are considered part of the string. Python's indentation rules for blocks do not apply to lines inside a multiline string.

Làm thế nào để bạn trích dẫn nhiều dòng trong Python?

Nếu viết một văn bản trong một dòng sau đó sử dụng dấu ngoặc kép hoặc trích dẫn đơn trong Python. Nếu viết một bài thơ hoặc bài hát hoặc văn bản nhiều dòng thì hãy sử dụng Trích dẫn ba (Hồi giáo hoặc 'hoặc').triple quotes(“”” or ”').

Làm cách nào để tạo nhiều dòng trên một dòng trong Python?

Để chuyển đổi một chuỗi đa dòng thành một dòng duy nhất:..
Sử dụng str.Phương thức Splitlines () để có được danh sách các dòng trong chuỗi ..
Sử dụng str.Phương thức Dải () để loại bỏ khoảng trắng dẫn đầu và dấu vết từ mỗi dòng ..
Sử dụng phương thức tham gia () để tham gia danh sách với bộ phân cách không gian ..

Có bao nhiêu cách bạn có thể nhập một chuỗi đa dòng vào Python?

Ba trích dẫn đơn, ba trích dẫn kép, giá đỡ và dấu gạch chéo ngược có thể được sử dụng để tạo chuỗi đa dòng. can be used to create multiline strings.