Chuỗi đa dòng trong Python thay đổi thụt đầu dòng

Sep 14 2020

Tôi đang làm việc trên Tự động hóa với Python và Selenium. Tôi phải dán một khối mã SQL & Java Script trong Vùng Văn bản trong trang web. Tôi đã sử dụng nhiều cách để gửi các chuỗi, nhưng nó thay đổi thụt lề. Có cách nào để gửi mã / chuỗi mà không có bất kỳ thay đổi nào đối với thụt lề không? Tôi đã sử dụng tất cả những thứ bên dưới và không có gì hiệu quả,

textwrap.dedent(prdrsql1)
textwrap.dedent(prdrsql1).lstrip()
(prdrsql1).lstrip()
(prdrsql1).strip()

Mã:

prdrsql1 = ("""
        SELECT DISTINCT CAST(q2.SubjectId AS varchar(32)) as SubjectId, q2.SubjectNum, 
'A' as ItemOid,
q1.B as VisitId,
q1.[C] as VisitRepeatKey,
q1.[D] AS FormOid,
q1.E as FormRepeatKey,
'Y' as Data
FROM Table.A.ABC q2 with (NOLOCK)
    Right Join (
    select hashkey, SubjectNum, 
    (CASE WHEN C is null THEN 'SUBJECT' ELSE [D] END) AS 
    [D], 
    (CASE WHEN G is null THEN 'SUBJECT' ELSE [G] END) AS 
    [G], 
    FormOID, [DD], AB,ABC
    from Table.A.ABC with (NOLOCK) where abc=123
    ) q1
    on q1.abc = q2.qbc
    AND q1.AA = 1 and AAA=1""")

Đầu ra:

Đầu ra là

Bởi vì điều này, trình biên dịch không biên dịch mã và đưa ra một Lỗi.

Tôi cần gửi các Tập lệnh SQL & Java này ( Tôi có một trường văn bản khác nơi tôi gửi mã JS có các điều kiện For Loops và IF ) Các mã mà không thay đổi Thụt lề hoặc ít nhất là bắt đầu tất cả các dòng từ đầu dòng . Ai đó có thể vui lòng cung cấp thông tin đầu vào của bạn không?

Trình biên dịch chỉ biên dịch mã nếu mã như bên dưới.

Cảm ơn, Sanjay.

Trả lời

JaspreetKaur Sep 24 2020 at 06:45

Giải pháp cho vấn đề này rất đơn giản. Bạn chỉ cần sao chép đã dán Truy vấn SQL với hy vọng rằng nó sẽ hoạt động ở đây như ban đầu. Điều ở đây trong Python là nó nhạy cảm với thụt lề. thụt lề sai sẽ gây ra sự cố ngoài ý muốn. Bây giờ, mặt khác Truy vấn SQL và Mã JavaScript, cả hai đều không nhạy cảm với thụt lề. Những điều này phụ thuộc vào; (dấu chấm phẩy) để ngắt dòng. Điều này có nghĩa là ngay cả khi bạn chỉ định 300 lệnh trong một dòng ngăn cách mỗi lệnh bằng dấu; (dấu chấm phẩy) các lệnh sẽ thực thi mà không phức tạp. Nhưng điều tương tự sẽ không hoạt động ở đây trong trường hợp python.

Nếu bạn thử mã dưới đây, điều này sẽ phù hợp với bạn và bạn sẽ nhận được kết quả như mong đợi.

prdrsql1 = ("SELECT DISTINCT CAST(q2.SubjectId AS varchar(32)) as SubjectId, q2.SubjectNum, 'A' as ItemOid, q1.B as VisitId, q1.[C] as VisitRepeatKey, q1.[D] AS FormOid, q1.E as FormRepeatKey, 'Y' as Data FROM Table.A.ABC q2 wit (NOLOCK) Right Join ( select hashkey, SubjectNum, (CASE WHEN C is null THEN 'SUBJECT' ELSE [D] END) AS [D], (CASE WHEN G is null THEN 'SUBJECT' ELSE [G] END) AS [G], FormOID, [DD], AB,ABCfrom Table.A.ABC with (NOLOCK) where abc=123) q1 on q1.abc = q2.qbc AND q1.AA = 1 and AAA=1")

Hãy thử in và xác minh đầu ra của biến này trong SQL Client của bạn trước khi thực sự sử dụng nó.