Python Multiline String เปลี่ยนการเยื้อง

Sep 14 2020

ฉันกำลังทำงานเกี่ยวกับระบบอัตโนมัติกับ Python และ Selenium ฉันต้องวางบล็อกของโค้ด SQL & Java Script ภายใน Text Area ในเว็บไซต์ ฉันใช้หลายวิธีในการส่งสตริง แต่มันเปลี่ยนการเยื้อง มีวิธีส่งรหัส / สตริงโดยไม่มีการเปลี่ยนแปลงการเยื้องหรือไม่? ฉันใช้ทั้งหมดด้านล่างและไม่มีอะไรได้ผล

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

รหัส:

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""")

เอาท์พุต:

คือผลลัพธ์

ด้วยเหตุนี้คอมไพเลอร์จึงไม่รวบรวมโค้ดและให้ข้อผิดพลาด

ฉันต้องการส่ง SQL & Java Script เหล่านี้ ( ฉันเป็นช่องข้อความอื่นที่ฉันจะส่งรหัส JS ซึ่งมีเงื่อนไขสำหรับลูปและ IF ) รหัสโดยไม่ต้องแก้ไขการเยื้องหรืออย่างน้อยก็เริ่มทุกบรรทัดจากจุดเริ่มต้นของบรรทัด . ใครช่วยให้ข้อมูลของคุณ?

คอมไพลเลอร์คอมไพเลอร์จะคอมไพล์โค้ดก็ต่อเมื่อโค้ดดังต่อไปนี้

ขอบคุณ Sanjay

คำตอบ

JaspreetKaur Sep 24 2020 at 06:45

วิธีแก้ปัญหานี้ง่ายมาก คุณเพียงแค่คัดลอกวางแบบสอบถาม SQL โดยหวังว่าจะใช้งานได้ที่นี่ สิ่งที่อยู่ใน Python คือมันมีความไวในการเยื้อง การเยื้องผิดจะทำให้เกิดปัญหาโดยไม่ได้ตั้งใจ ในทางกลับกัน SQL Queries และ JavaScript Code ทั้งสองไม่มีการเยื้องที่ละเอียดอ่อน สิ่งเหล่านี้ขึ้นอยู่กับ; (อัฒภาค) เพื่อทำลายเส้น ซึ่งหมายความว่าแม้ว่าคุณจะระบุ 300 คำสั่งในหนึ่งบรรทัดโดยแยกแต่ละคำสั่งด้วย; (อัฒภาค) คำสั่งจะดำเนินการโดยไม่ยุ่งยาก แต่สิ่งเดียวกันนี้จะใช้ไม่ได้ในกรณีของ python

หากคุณลองใช้รหัสด้านล่างนี้จะได้ผลสำหรับคุณและคุณจะได้รับผลลัพธ์ที่คาดหวัง

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")

ลองพิมพ์และตรวจสอบผลลัพธ์ของตัวแปรนี้ในไคลเอนต์ SQL ของคุณก่อนที่จะใช้งานจริง