Category: Database

  • การเชื่อมต่อฐานข้อมูล Oracle ผ่าน Access office 365

    สำหรับหลาย ๆ ท่านนอกเหนือจากที่ต้องมีหน้าที่ในการพัฒนาโปรแกรมเป็นหลักแล้ว อาจจะต้องมีหน้าที่ในการนำเข้าข้อมูลด้วย ตัวเองก็เช่นกันต้องทำหน้าที่ในการนำเข้าข้อมูลเข้าฐานข้อมูล Oracle อยู่เป็นประจำ จริงๆ มีหลายเครื่องมือในการนำเข้าข้อมูล เช่น SQL Developer , Toad for Oracle เป็นต้น แต่บางครั้งก็ไม่สะดวกเพราะบางข้อมูลต้องผ่านการจัดการก่อนถึงจะสามารถถ่ายโอนได้ ตัวเองก็มีอีกวิธีคือ ถ่ายโอนผ่าน Access office 365

    สำหรับบทความในครั้งนี้ ขอนำเสนอวิธีการเชื่อมต่อฐานข้อมูล Oracle ผ่าน Access office 365 เผื่อใครจะใช้เป็นทางเลือกในการจัดการข้อมูลของ Oracle กันค่ะ

    โดยทำตามขั้นตอนดังต่อไปนี้

    STEP 1

    • ติดตั้ง  Oracle Database 12c Release 2 Client for Microsoft Windows (32bit)
    • ตั้งค่า TNS Service name ในการเข้าถึงฐานข้อมูล Oracle ผ่าน Oracle Net Manager โดยมีขั้นตอนดังนี้
      • เปิดโปรแกรม Net Manager
      • คลิกที่ Local -> Service Naming คลิกเครื่องหมาย +
      • ระบบแสดงหน้าต่าง Net Service Name Wizard
      • ขั้นตอนที่ 1 ตรงช่อง Net Service Name ป้อนชื่อที่ต้องการ เช่น TEST_DB คลิกปุ่ม ถัดไป
      • ขั้นนตอนที่ 2 คลิกเลือก TCP/IP (Internet Protocol)  คลิกปุ่ม ถัดไป
      • ขั้นตอนที่ 3 ตรงช่อง Host Name: ป้อนชื่อฐานข้อมูล Oracle ที่ต้องการ เช่น TEST.PSU.AC.TH  ระบุ Port Number: 1521
      • ขั้นตอนที่ 4 ตรงช่อง Service Name ให้ใส่ชื่อ Service Name ของ Database ที่ระบุในขั้นตอนที่ 3 คลิกปุ่ม ถัดไป
      • ขั้นตอนที่ 5 ซึ่งเป็นขั้นตอนสุดท้าย เราสามารถคลิกปุ่ม Test เพื่อทดสอบการ connect กับฐานข้อมูล และคลิกปุ่ม เสร็จสิ้น เพื่อสิ้นสุดการการสร้าง Service Naming
    ภาพแสดงการตั้งค่า TNS Service name ขั้นตอนที่ 1
    ภาพแสดงการตั้งค่า TNS Service name ขั้นตอนที่ 2
    ภาพแสดงการตั้งค่า TNS Service name ขั้นตอนที่ 3
    ภาพแสดงการตั้งค่า TNS Service name ขั้นตอนที่ 4
    ภาพแสดงการตั้งค่า TNS Service name ขั้นตอนที่ 5

    STEP 2

    • เปิดโปรแกรม ODBC Data Sources (32-bit)
      • คลิกเลือกแท็บ System DSN คลิกปุ่ม Add…
      • คลิกเลือก driver : Oracle in OraClient 12Home1_32bit ในหน้าต่าง Create New Data Source คลิกปุ่ม Finish
      • ระบบแสดงหน้าต่าง Oracle ODBC Driver Configuration
        • กำหนด Data Source Name และ Description
        • เลือก TNS Service Name จากที่สร้างไว้ในขั้นตอนการตั้งค่า TNS Service name ขั้นตอนที่ 2 (กรณีไม่มีให้เลือกสามารถพิมพ์เองได้)
        • ตรงช่อง User ID ระบุ user / schema  เพื่อ connect เข้าฐานข้อมูล Oracle
        • คลิกปุ่ม OK
    ภาพแสดงหน้าต่างการเลือก driver ของ data source
    ภาพแสดงหน้าต่าง Oracle ODBC Driver Configuration

    STEP 3

    • เปิดโปรแกรม Access office 365
      • คลิกเลือกเมนู External Data -> New Data Source -> From Other Sources -> ODBC Database
      • ระบบแสดงหน้าต่าง Get External Data – ODBC Database
      • คลิกเลือก Link to data source by creating a linked table.
      • คลิกปุ่ม OK
      • ระบบแสดงหน้าต่าง Select Data Source คลิกแท็บ Machine Data Source
      • คลิกเลือก Data Source Name ที่เราได้สร้างไว้แล้ว คลิกปุ่ม OK
      • ระบบแสดงหน้าต่าง Oracle ODBC Driver Connect
      • กรอก Password เพื่อ connect เข้าฐานข้อมูล Oracle คลิกปุ่ม OK
      • ระบบแสดง Link Tables คลิกเลือกตารางที่ต้องการ คลิกปุ่ม OK
    ภาพแสดงหน้าจอหลักของ Access
    ภาพแสดงหน้้าต่าง Get External Data – ODBC Database
    ภาพแสดงหน้าต่าง Select Data Source
    ภาพแสดงหน้าต่าง Oracle ODBC Driver Connect
    ภาพแสดง Link Tables

    จากนั้นตารางที่เราเลือกก็จะมาแสดงให้เราเห็น เราก็สามารถจัดการข้อมูลดังกล่าวผ่าน Access office 365 ได้แล้ว คราวนี้ถ้าต้องการนำเข้าข้อมูลเราก็สามารถใช้ความสามารถของ Access ได้ผ่านตัว Append Query ได้หรือแม้แต่จะปรับปรุงข้อมูลก็สามารถทำได้ผ่านตัว Update Query เป็นต้น

    ภาพแสดงตัวอย่าง Linked Table ของฐานข้อมูล PSU_ADMISSION

  • วิธีการแสดงผลวันที่เป็นภาษาที่ต้องการด้วยฟังก์ชัน TO_CHAR

    หลาย ๆ คนคงเคยเจอปัญหาว่าฐานข้อมูลของเรากำหนด default การจัดเก็บข้อมูลวันที่ไว้เป็นปี ค.ศ. แต่ระบบที่เราพัฒนาต้องแสดงผลเป็นปี พ.ศ. เราต้องทำอย่างไร วันนี้จึงขอนำเสนอวิธีการแสดงผลวันที่เป็นภาษาที่เราต้องการด้วยฟังก์ชัน TO_CHAR กันค่ะ

    โดยที่ฟังก์ชัน TO_CHAR ทำหน้าที่ในการแปลงข้อมูลตัวเลขและข้อมูลวันที่เป็นตัวอักษร ซึ่งมีรูปแบบ Syntax ดังนี้

    TO_CHAR( input_value, [format_mask], [nls_parameter] )

    พารามิเตอร์ของฟังก์ชัน TO_CHAR คือ

    • input_value (จำเป็น): ค่าของวันที่ที่ต้องการจะแปลงค่า
    • format_mask (ทางเลือก): เป็นรูปแบบที่ต้องการให้แสดง หากไม่ได้ระบุไว้จะแสดงตามค่า default ที่กำหนดไว้
    • nls_parameter (ทางเลือก): เป็น nls language ที่จะใช้ในการแปลงค่า

    ต่อไปนี้เป็นตัวอย่าง format_mask ที่ใช้บ่อย ๆ โดยแต่ละ format_mask สามารถนำผสมรวมกันได้ เพื่อให้ได้ค่าการแสดงผลที่เราต้องการ

    format_mask คำอธิบาย
    YEAR อ่านค่าปีเป็นตัวอักษร
    YYYY, YYY, YY, Y แสดงจำนวนหลักสุดท้ายของปีตามที่ระบุ
    MM แสดงเดือน (01-12, JAN = 01)
    MON แสดงชื่อเดือนแบบย่อ
    MONTH แสดงชื่อเดือนแบบเต็ม
    D แสดงวันในสัปดาห์
    DAY แสดงชื่อของวัน
    DD แสดงวันของเดือน (1-31)
    DDD แสดงวันของปี (1-366)
    DY แสดงชื่อย่อของวัน
    HH แสดงชั่วโมงของวัน (1-12)
    HH12 แสดงชั่วโมงของวัน (1-12)
    HH24 แสดงชั่วโมงของวัน (0-23)
    MI แสดงนาที (0-59)
    SS แสดงวินาที (0-59)

    คราวนี้ลองมาเขียน query เพื่อดูตัวอย่างค่าของ format_mask แต่ละตัวกันว่าจะแสดงผลออกมาเป็นอย่างไร

    รูปแสดง query และผลลัธพ์ที่ได้จากการแสดงผลตาม format_mask

    จะเห็นว่าค่าวันที่ที่แสดง แสดงเป็นปี ค.ศ. ตาม default ของฐานข้อมูล สังเกตุว่าข้อมูลบาง format_mask จะมีค่าศูนย์นำหน้า และมีช่องว่างตามหลัง ดังนั้นถ้าต้องการตัดเลขศูนย์และช่องว่างเราสามารถใช้ “FM” นำหน้า format_mask ตามตัวอย่างต่อไปนี้

    รูปแสดง query และผลลัพธ์ที่ได้จากการใช้ “FM” นำหน้า format_mask

    คราวนี้ถ้าเราต้องการที่จะให้การแสดงผลวันที่เป็นวัน เดือน ปี ไทย เราสามารถใช้ nls_parameter เข้ามาช่วยได้โดยสามารถกำหนดได้ตามตัวอย่างข้างล่างนี้

    รูปแสดงตัวอย่างวิธการกำหนด nls_parameter และผลลัพธ์ที่ได้

    ตัวแปรที่สำคัญคือ 
    – NLS_CALENDAR ตัวนี้แหละที่ทำให้ พ.ศ. แสดงเป็น พุทธศักราช 2562 (THAI BUDDHA)
    – NLS_DATE_LANGUAGE  ตัวนี้กำหนดให้แสดงเดือนเป็นภาษาไทย (THAI)

    ด้วยตัวพารามิเตอร์ NLS_CALENDAR และ NLS_DATE_LANGUAGE เราก็สามารถแสดงผลเป็น ภาษาอะไรก็ได้ตามที่เราต้องการ

  • วิธีการคำนวณหาอายุด้วย Oracle Datetime Functions

    อายุเป็นเพียงตัวเลข มีคนพูดไว้แบบนี้ แล้วถ้าเราอยากจะรู้ล่ะว่าไอ้ตัวเลข จำนวนปี จำนวนเดือน และจำนวนวัน ของอายุเรามันเป็นตัวเลขอะไร ถ้าไม่อะไรมากใช้เครื่องคิดเลข หรือนับเอาก็ได้อยู่ แต่ถ้าต้องคำนวณของทุกคนในองค์กรล่ะจะนับเอง หรือเครื่องคิดเลขก็คงไม่ไหวแล้ว ดังนั้นวันนี้จึงจะขอแนะนำ Oracle Datetime Functions ที่สามารถนำมาประยุกต์ใช้ เพื่อคำนวณหาอายุของเรากันค่ะ

    Oracle Datetime Functions ที่จะแนะนำในวันนี้คือ ฟังก์ชัน TRUNC (date), ADD_MONTHS และฟังก์ชัน MONTHS_BETWEEN โดยมีรายละเอียดของฟังก์ชันดังนี้

    ฟังก์ชันคำอธิบาย
    ADD_MONTHSเพิ่มจำนวนเดือนลงในวันที่ที่ระบุ
    MONTHS_BETWEEN หาจำนวนเดือนระหว่าง 2 วันที่ที่ระบุ
    TRUNC (date)คืนค่าวันที่พร้อมส่วนเวลาของวันที่ตัดให้เป็นหน่วยที่ระบุ

    ตัวอย่างการใช้งานฟังก์ชัน ADD_MONTHS
    Syntax :
    ADD_MONTHS(date, integer)

    รูปแสดงตัวอย่างการเขียน query และผลลัพธ์ที่ได้ของฟังก์ชัน ADD_MONTHS

    ตัวอย่างการใช้งานฟังก์ชัน MONTHS_BETWEEN
    Syntax :
    MONTHS_BETWEEN(date1, date2)

    รูปแสดงตัวอย่างการเขียน query และผลลัพธ์ที่ได้ของฟังก์ชัน MONTHS_BETWEEN

    ตัวอย่างการใช้งานฟังก์ชัน TRUNC (date)
    Syntax :
    TRUNC ( date [, format ] )

    โดยที่ format ไม่ต้องระบุก็ได้ กรณีไม่ระบุวันที่จะถูกตัดเป็นวันที่ใกล้ที่สุด สามารถแสดงตัวอย่างของ format ได้ดังต่อไปนี้

    รูปแบบ Formatหน่วยปัดเศษ
    SYYYY, YYYY, YEAR. SYEAR, YYY, YY, Y ปี
    MONTH, MON, MM, RM เดือน
    DDD, DD, J วัน
    DAY, DY, D วันเริ่มต้นของสัปดาห์
    HH, HH12, HH24 ชั่วโมง
    MIนาที

    รูปแสดงตัวอย่างการเขียน query และผลลัพธ์ที่ได้ของฟังก์ชัน TRUNC (date)

    จากตัวอย่าง query การใช้งานทั้ง 3 ฟังก์ชันข้างต้น เราสามารถประยุกต์ใช้เพื่อคำนวณหาจำนวนปี จำนวนเดือน และจำนวนวันของอายุได้ดังนี้

    รูปแสดงตัวอย่าง query การหาจำนวนปี จำนวนเดือน และจำนวนวันของอายุ

    คิดว่านอกเหนือจากการคำนวณหาอายุแล้วก็ยังไปประยุกต์ใช้สำหรับการหาช่วงเวลาอื่นๆ ได้อีกเช่น ระยะเวลาในการปฏิบัติงานเป็นต้น

  • SQL Expression สำหรับหาช่วงเวลาที่ต้องการ

    ใครที่เคยสร้าง Materialized View จะทราบว่าต้องมีการกำหนดช่วงเวลาเพื่อให้ Materialized View นั้นทำการ Refresh ข้อมูลเพื่อให้ได้ข้อมูลที่เป็นปัจจุบัน หรือแม้แต่ Job ก็เช่นกันต้องกำหนดช่วงเวลาเพื่อให้ Job ทำงานตามช่วงเวลาที่กำหนด บางคนอาจจะเจอปัญหาว่าไม่รู้ว่าต้องกำหนดอย่างไร เช่น อยากให้ทำงานทุก 8 โมงเช้า หรืออยากให้ทำงานทุกเที่ยงคืน เป็นต้น เพื่อให้ปัญหานั้นหมดไป เรามาทำความเข้าใจเกี่ยวกับช่วงเวลาบน Oracle กันดีกว่า

    จากที่เราทราบกันว่า 1 วันมี 24 ชั่วโมง 1 ชั่วโมงมี 60 นาที และ 1 นาทีมี 60 วินาที บน Oracle เราสามารถเขียนเป็น Expression ได้ตามตัวอย่างข้างล่างนี้

    ช่วงเวลา : PeriodExpression 1Expression 2
    1 Day11
    1 Hour1/241/24
    1 Minute1/(24*60)1/1440
    1 Second1/(25*60*60)1/86400

    ดังนั้นจาก Expression ข้างต้นเราก็สามารถเขียนช่วงเวลา ด้วย SQL Expression ดังตัวอย่างต่อไปนี้

    ช่วงเวลาที่ต้องการSQL Expression
    Nowsysdate
    Tomorrowsysdate+1
    Yesterdaysysdate-1
    One hour from nowsysdate + 1/24
    Ten minutes from nowsysdate + 10/1440
    Thirty seconds from nowsysdate + 30/86400
    Tomorrow at 12 Midnighttrunc(sysdate+1)
    Tomorrow at 8 AMtrunc(sysdate+1) + 8/24
    Yesterday at 10 AMtrunc(sysdate-1) + 10/24
    Next Monday at 12 Noonnext_day(trunc(sysdate),’MONDAY’) + 12/24

    คราวนี้เราลองมาเขียนคำสั่งในการ select ข้อมูลตามช่วงเวลาที่ต้องการกันดีกว่าค่ะ

    ตัวอย่างที่ 1 ต้องการ query ข้อมูลเพื่อหาข้อมูลช่วงเวลาดังนี้ วันเวลาปัจจุบัน, หนึ่งชั่วโมงถัดไปจากปัจจุบัน, พรุ่งนี้ตอนเที่ยงคืน และพรุ่งนี้ตอน 8 โมงเช้า สามารถเขียน query เพื่อให้ได้ช่วงเวลาที่ต้องการได้ดังนี้ค่ะ

    ผลลัพธ์ที่ได้จาก query ตัวอย่างที่ 1

    ตัวอย่างที่ 2 ต้องการ query ข้อมูลเพื่อหาข้อมูลช่วงเวลาดังนี้ วันเวลาปัจจุบัน, สิบนาทีถัดไปจากปัจจุบัน, 30 วินาทีถัดไปจากปัจจุบัน และเวลาเที่ยงของวันศุกร์ถัดไป สามารถเขียน query เพื่อให้ได้ช่วงเวลาที่ต้องการได้ดังนี้ค่ะ

    ผลลัพธ์ที่ได้จาก query ตัวอย่างที่ 2

    จาก 2 ตัวอย่างข้างต้นคิดว่าก็พอจะเป็นแนวทางให้กับทุกท่านได้สามารถกำหนดช่วงเวลาที่ต้องการได้ไม่มากก็น้อย

  • การเขียน SQL เพื่อเลื่อนลำดับขึ้นลงอัตโนมัติ

    การเขียน SQL เพื่อเลื่อนลำดับขึ้นลงอัตโนมัติของ column ที่ระบุลำดับเป็นตัวเลข

    รูปที่ 1 ตัวอย่างรูปแบบตาราง
    (more…)
  • ELK #08 Oracle Audit Trail

    ต่อจา ELK #07 – Logstash คราวนี้ มาใช้งานจริง โดยใช้ ELK เพื่อเก็บ Log ของ Oracle Audit Trail

    1. Oracle Audit Trail บน Database Server เก็บ Log ในรูปแบบ XML โดยแต่ละ Event จะมี tag <AuditRecord> … </AuditRecord> คุมอยู่ ที่แตกต่างจาก Log ทั่วไปคือ ในแต่ละ Event จะมีเครื่องหมาย CRLF (การขึ้นบรรทัดใหม่) เป็นระยะ ๆ
    2. ออกแบบให้ Logstash รับข้อมูล (Input Plugin) จาก TCP Port 5515 ซึ่งต้องใช้ Codec ในการรวบ Multiline ในแต่ละ Event เข้าด้วยกัน โดยหา pattern “<AuditRecord>” เป็นจุดเริ่มต้น ส่วนบรรทัดที่ไม่เจอ Pattern ดังกล่าวนั้นการตั้งค่า negate => “true” เป็นการบอกว่า “ให้ดำเนินการต่อไป” โดยจะเอาบรรทัดที่ตามมาจากนี้ ต่อท้าย ด้วยการตั้งค่า what=> “previous”
    3. ในส่วนของ Filter Plugin จะอ่านค่าจาก “message” และ ส่งสิ่งที่ถอดจาก XML ได้ ไปยัง “doc”
    4. ในส่วของ Output Plugin จะส่งออกไปยัง ElasticSearch ที่ TCP port 9200

    ดัง Configuration ต่อไปนี้

    input {
       syslog {
          port => 5515
          codec => multiline {
               pattern => "<AuditRecord>"
               negate  => "true"
               what    => "previous"
          }
       }
    }
    filter {
       xml {
          source => "message"
          target => "doc"
       }
    }
    output {
      elasticsearch {
         hosts => ["elk.server:9200"]
      }
    }

    จากนั้น ทาง Oracle Database Server ทำการเปิด Audit Trail แล้วเขียน Log ลงไฟล์ แล้วเขียน Cron เพื่อ Netcat ไฟล์ส่งมาให้ Lostash ที่เปิด Port TCP 5515 ไว้รอรับ

    ผลที่ได้คือ

    โดยวิธีนี้ จะเป็นการนำ Log ซึ่งจากเดิมเป็น Text Format นำมาเป็น NoSQL ได้ ซึ่งจะสามารถ Query ข้อมูลได้ง่ายยิ่งขึ้น

    หวังว่าจะเป็นประโยชน์ครับ

  • Toad : หากันจนเจอ (pass ที่เคย save ไว้)

    เคยไหม ที่คุณลืม password ที่คุณเคยเซฟไว้ใน Toad

    เคยไหม ที่วันนึงคุณต้องการใช้ password เหล่านั้นแต่คุณจำไม่ได้ ดูก็ไม่ได้ เพื่อนก็จำไม่ได้!!!

    วันนี้เรามีทริกที่จะสามารถดู password ที่เราเคย save ไว้ใน toad ได้ มาดูกันเล้ยยย!!!

    • ขั้นตอน 1 เลือก Schema ใดก็ได้ที่เรา login ได้ มาสักอัน
    • ขั้นตอน 2 เลือกเมนู DB Links และกดปุ่ม สร้าง
    • ขั้นตอน 3 ตั้งชื่อ DB Link (ตั้งอะไรก็ได้เพราะไม่ได้เอาไปใช้จริง) จากนั้นเลือก Database ที่ต้องการทราบ Password สุดท้ายกดปุ่ม “Show SQL”
    • ขั้นตอนสุดท้าย ดูที่บรรทัด identified by “xxx” โดย xxx คือ Password ที่เราต้องการ

    แค่นี้เองค่ะ หวังว่าคงจะเป็นประโยชน์สำหรับผู้พัฒนาหลาย ๆ ท่าน
    ที่ต้องกลับไปต่อฐานข้อมูลดั้งเดิมที่เราเคย save password ไว้แล้วลืมนะคะ 🙂

    ออ…Version Toad ที่ใช้คือ 9.6.0.27 นะคะ
    ไม่แน่ใจว่า Version ที่สูงกว่านี้ยังใช้วิธีนี้ได้อีกรึเปล่า ><

    แล้วพบกันใหม่ Blog หน้านะคะ ^.^

  • CrystalReport : จัดการกราฟซ่อนแอบ

    จากที่ผู้เขียนช่วงนี้ได้มีการทำกราฟใน Crystal Report ทำไปทำมาผลปรากฎว่า
    กราฟไม่แสดงรูปซะงั้น (ไหงเป็นแบบนี้ได้หว่าาาาาา T T)

    จึงได้ลองค้นหาข้อมูลและพบว่า ต้องเพิ่ม Config เพิ่มเติมเข้าไปใน
    ” Web.config “
    ตาม Code ด้านล่างเลยจ้าาาา

    ส่วนแรก

    “System.web” ส่วน “httpHandlers”
    โดย Version จะต้องเป็น Version Crystal Report ที่เราใช้งานอยู่ อย่าลืมตรวจสอบให้ตรงกันด้วยนะ

    <configuration>
     <system.web> 
       <httpHandlers>       
          <add verb="GET" path="CrystalImageHandler*"/type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>     
       </httpHandlers>   
     </system.web>
    </configuration>

    ส่วนที่สอง

    “System.webServer” ส่วน “handlers”
    โดย Version จะต้องเป็น Version Crystal Report ที่เราใช้งานอยู่ อย่าลืมตรวจสอบให้ตรงกันด้วยนะ

    <configuration>
     <system.webServer>
       <validation validateIntegratedModeConfiguration="false"/>
         <handlers>
           <add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler*" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/>
         </handlers>
     </system.webServer>
    </configuration>

    หวังว่า Blog นี้จะช่วยเหลือท่านที่ประสบปัญหาเดียวกันอยู่นี้ไม่มากก็น้อยนะคะ

    แล้วพบกันใหม่ Blog หน้าค่าาาาาา 🙂

  • วิธีเชื่อมต่อ PostgreSQL จาก python

    ในการเชื่อมต่อกับ PostgreSQL จาก Python นั้น จะต้องใช้ Package ‘psycopg2’

    คำสั่งในการติดตั้งคือ

    pip install psycopg2

    วิธีการเรียกใช้จาก python

    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import psycopg2
    from IPython.display import display, HTML # used to print out pretty pandas dataframes
    import matplotlib.dates as dates
    import matplotlib.lines as mlines
    
    %matplotlib inline
    plt.style.use('ggplot') 
    
    # specify user/password/where the database is
    sqluser = 'username'
    sqlpass = 'userpasswordgohere'
    dbname = 'dbname'
    schema_name = 'someschema'
    host = 'host.postgresql.server'
    
    query_schema = 'SET search_path to ' + schema_name + ';'
    
    # connect to the database
    con = psycopg2.connect(dbname=dbname, user=sqluser, password=sqlpass, host=host)
    
    query = query_schema + 'select * from sometable'
    df = pd.read_sql_query(query,con)

    ก็จะได้ df เป็น Dataframe เอาไปใช้งานต่อได้

    จบ