Sunday, October 9, 2022

Membuat Aplikasi Django dan PostgreSQL dengan menggunakan Docker cara 2

Setelah sebelumnya membuat aplikasi Django dan PostgreSQL di 

Membuat Aplikasi Django Dan PostgreSQL Dengan Menggunakan Docker Cara 1

Sekarang dengan sedikit perbedaan akan membuat aplikasi Django dan PostgreSQL di Windows.

Langkah yang dilakukan adalah dengan membuat virtual environment terlebih dahulu kemudian baru membuat kontainer dengan Docker. Hal ini dilakukan untuk lebih memahami persamaan dan perbedaan DOcker dengan virtual environment yang biasa dilakukan dalam pengembangan aplikasi Django. 

Membuat Virtual Environment


  • Buka command prompt dan buat direktori kerja
mkdir dockertest
  • Masuk ke folder direktori kerja
cd dockertest
  • Buat virtual environment, misal dengan nama venv
python -m venv venv
  • Aktifkan virtual environment
cd venv/scripts

activate
  • Setelah virtual environment active dengan ditandai di promt (venv)... Install Djanggo versi terakhir 4,
python -m pip install Django~=4.0.0
  • Install psycopg2-binary
python -m pip install psycopg2-binary==2.9.3
  • Buat project Django, misal dengan nama django_project
django-admin startproject django_project .
  • Lakukan migrate
python manage.py migrate
  • Jalankan server
python manage.py runserver
  • Cek di browser dengan alamat http:127.0.0.1:8000, jika berhasil menampilkan halama aplikasi Djanggo maka langkah yang dilakukan berhasil.
  • Buat file requirements.txt yang berisi paket yang dibutuhkan dari aplikasi Django yang sudah dibuat
pip freeze > requirements.txt
  • Selanjutnya akan membuat kontainer dengan docker, maka matikan virtual environment.
deactivate

Membuat Docker

  • Buat file Dockerfile, masukan kode:
vim Dokerfile

  • Masukan kode kedalam dile Dockerfile:

#Pull base image
FROM python:3.9

#SEt environment variable
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTBYTECODE 1
ENV PYTHONUNBUFFERED 1

#Set work directory
WORKDIR /code

#Install dependecies
COPY ./requirements.txt .
RUN pip install -r requirements.txt

#Copy project
COPY . .
  • Sebelum membangun image, buat file .dockerignore
vim .dockerignore
  • Masukan kode:
.venv
.git
.gitignore
  • Membangun docker,
docker build .
  • Membuat file docker-compose.yml
vim docker-compose.yml
  • Masukan kode, dengan catatan buat dulu database di PostgreSQL dan tentukan user dan password untuk akses ke database:
version: "3.9"

services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db    

volumes:
  postgres_data:
  • Lakukan konfigurasi untuk seting database di file docker_project/settings.py
vim docker_project/settings.py
  • Masukin kode skrip di bagian DATABASES:
DATABASES ={
     'default': {
         'ENGINE': 'django.db.backends.postgresql',
         'NAME': 'postgres',
         'USER': 'postgres',
         'PASSWORD': 'password',
         'HOST': 'db',
         'PORT': '5432',
         }
}
  • Menjalankan Docker
docker-compose up
  • Setelah proses selesai, silahkan cek server di browser dengan memasukan alamat http://127.0.0.1:8000. Jika berhasil menampilkan tampilan halaman aplikasi Django maka langkah-langkah yang dilakukan berhasil.
  • Atau dengan cara lain dapat dilakukan dengan mengabung perintah build dan docker-compose up dengan cara:
docker-compose up -d --build
  • Setelah dicek server berlajan, untuk keluar dari tampilan service docker dengan cara tekan Ctrl + C
  • Selanjutnya akan membuat aplikasi dengan nama accounts, untuk membuat aplikasi untuk pengguna.

Membuat Apps aaccounts

  • Membuat App dengan nama accounts
docker-compose run web python manage.py startapp accounts

atau

docker-compose exec web python manage.py startapp accounts
  • Membuat CustomUser dengan menggunakan AbstractUser, edit file #accounts/models.py 
from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class CustomUser(AbstractUser):
    pass

  • Tambahkan App accounts di bagian INSTALLED_APPS pada file #django_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #local
    'accounts.apps.AccountsConfig', #tambahkan
]
  • Tambahkan juga di bagian bawah file #django_project/settings.py
AUTH_USER_MODEL = 'accounts.CustomUser'

  • Lakukan makemigrations
docker-compose exec web python manage.py makemigrations accounts

output:

Migrations for 'accounts':
  accounts/migrations/0001_initial.py
    - Create model CustomUser

  • Lakukan migrate
docker-compose exec web python manage.py migrate

output:

Operations to perform:
  Apply all migrations: accounts, admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying accounts.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying sessions.0001_initial... OK
  • Edit file #accounts/forms.py:
#accounts/forms.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = get_user_model()
        fields = ("email", "username",)


class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = get_user_model()
        fields = ("email", "username",)

  • Edit file #accounts/admin.py
#accounts/admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm

# Register your models here.
CustomUser = get_user_model()

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser

    list_display = [
        "email",
        "username",
        "is_superuser",
        ]

admin.site.register(CustomUser, CustomUserAdmin)
  • Buat superuser untuk admin, misal dengan username: postgresqladmin, email: postgresqladmin@email.com, dan password: testpass123.
    docker-compose exec web python manage.py createsuperuser
  • Lalu coba di browser alamat admin http://127.0.0.1:8000/admin, login dengan user yang tadi dibuat.
  • Silahkan klik di menu ACCOUNTS/Users, dengan menu tersebut bisa melihat, merubah user dengan menampilkan inputan username dan password serta kemudian menambahkan email dan status user. Silahkan dicoba-coba.

Melakukan test Aplikasi

Setelah dibuat fungsional baru pada aplikasi accounts, selanjutnya dilakukan testing dengan menggunakna unit testing dari framework Django. Testing dilakukan karena meupakan hal penting yang harus dilakukan seperti yang disampaikan oleh pendiri Django yaitu Jacob Kaplan-Moss bahwa "Kode program tanpa dilakukan test adalah sebuah kerusakan dalam desain". Dalam Django terdapat dua tipe test yaitu:

  • Unit test kecil, cepat, dan terisolasi untuk sebagian fungsi dalam aplikasi.
  • Test yang terintegrasi dimana besar, lambat, dan unit test dilakukan pada keseluruhan aplikasi. 

Dalam contoh ini dilakukan unit test sekala kecil pada bagian fungsi yang baru dibuat. Langkah yang dilakukan adalah:

  • Edit file #accounts/test.py 
vim accounts/tests.py
  • Dan masukan kode di file #accounts/test.py:
#accounts/test.py
from django.contrib.auth import get_user_model
from django.test import TestCase

class CustomUserTests(TestCase):
    def test_create_user(self):
        User = get_user_model()
        user = User.objects.create_user(username="wawanhn", email="wawanhn@email.com", password="testpass123")

        self.assertEqual(user.username, "wawanhn")
        self.assertEqual(user.email, "wawanhn@email.com")
        self.assertTrue(user.is_active)
        self.assertFalse(user.is_staff)
        self.assertFalse(user.is_superuser)

    def test_create_superuser(self):
        User = get_user_model()
        admin_user = User.objects.create_superuser(username="superadmin", email="superadmin@email.com", password="testpass123")
        self.assertEqual(admin_user.username, "superadmin")
        self.assertEqual(admin_user.email, "superadmin@email.com")
        self.assertTrue(admin_user.is_active)
        self.assertTrue(admin_user.is_staff)
        self.assertTrue(admin_user.is_superuser)
  • Lakukan test
docker-compose exec web python manage.py test
  • Jika berhasil maka akan menghasilkan output:

output:

Found 2 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.494s

OK
Destroying test database for alias 'default'...

Membuat Homepage Aplikasi

  • Buat aplikasi pages
docker-compose exec web python manage.py startapp pages
  • Tambahkan pages di file #django_project/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accounts.apps.AccountsConfig',
    'pages.apps.PagesConfig', #tambahan baru
]
  • Tentukan BASE Directory dan templates di file #django_project/settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR/'templates'], #tambahkan di baris ini
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  • Buat folder templates di Direktory kerja dengan nama templates
mkdir templates
  • Buat file html di folder templates dengan nama _base.html dan home.html
vim templates/_base.html
vim templates/home.html
  • File _base.html cara penulisan didepan kata base ada underscore ini hanya merupakan kebiasaan yang menunjukan bahwa file ini akan digunakan/extends untuk file html di seluruh aplikasi (diwariskan). Buat kerangka standar file html untuk file #templates/_base.html
<!-- templates/_base.html -->
<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>{% block title %} Toko Buku {% endblock title %}</title>
    </head>
    <body>
        <div class='container'>
            {% block content %}

            {% endblock content %}
        </div>
    </body>
</html>

  • Masukan kode program pada file #templates/home.html
<!-- templates/home.html -->
{% extends '_base.html' %}

{% block title %} Home {% endblock title %}

{% block content %}
  <h1>Tihs is our home page.</h1>
{% endblock content %}

  • Selanjutnya buat routing alamat web index atau link ke halaman saat pertama kali aplikasi dibuka, tambahkan navigasi ke halaman utama dengan mengedit file #django_project/urls.py
from django.contrib import admin
from django.urls import path, include #tambahkan ini

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pages.urls')), #tambahkan ini
]
  • Buat routing di aplikasi pages, yaitu file #pages/urls.py
vim pages/urls.py
  • Tambahkan kode:
#pages/urls.py
from django.urls import path
from .views import HomePageView

urlpatterns = [
        path('', HomePageView.as_view(), name='home'),
        ]
  • Edit tampilan view di file #pages/views.py
#pages/views.py
from django.shortcuts import render
from django.views.generic import TemplateView

# Create your views here.
class HomePageView(TemplateView):
    template_name = 'home.html'
  • Untuk melihat perubahan karena sudah menambahkan app pages dan routing, matikan docker dan jalankan lagi
docker-compose down

docker compose up -d 

  • Buka alamat http://127.0.0.1:8000/ maka akan menampilkan tampilan halaman home.html


Membuat Test untuk app pages

Test Untuk Homepages

  • Lakukan test dengan menggunakna Django SimpleTest
vim pages/tests.py
  • Buka file #pages/test.py dan masukan kode:
#pages/tests.py
#from django.test import TestCase
from django.test import SimpleTestCase
from django.urls import reverse

# Create your tests here.
class HomepageTests(SimpleTestCase):
    def test_url_exists_at_correct_location(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)
  • Lakukan simpletest, dengan kode:
docker-compose exec web python manage.py test
  • jika berhasil maka akan menghasilkan output:
Found 4 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
....
----------------------------------------------------------------------
Ran 4 tests in 0.554s

OK
Destroying test database for alias 'default'...
  • Dari info diatas dilakukan 4 tes karena terdapat 2 tes sebelumnya untuk Custom User Model. Dan jika menginginkan test hanya untuk untuk aplikasi pages maka perintahnya:
docker-compose exec web python manage.py test pages
  • Dan hasil dari perintah tersebut:
Found 2 test(s).
System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 2 tests in 0.025s

OK
  • Dari hasil test diatas tidak melibatkan akses ke database.

Test Untuk Templates

  • Untuk test template menggunakan fungsi assertTemplateUsed tambahkan kode di file #pages/tests.py
#pages/tests.py
#from django.test import TestCase
from django.test import SimpleTestCase
from django.urls import reverse

# Create your tests here.
class HomepageTests(SimpleTestCase):
    def test_url_exists_at_correct_location(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)

    def test_homepage_template(self): #tambahan baru
        response = self.client.get('/')
        self.assertTemplateUsed(response, 'home.html')
  • Lakukan test, dan jika berhasil akan menghasilkan ouput Found 3 test dan no issues
docker-compose exec web python manage.py test pages

Test Untuk Html, dll

  • Keseluruhan kode test app page di file #pages/tests.py
#pages/tests.py
#from django.test import TestCase
from django.test import SimpleTestCase
from django.urls import reverse, resolve
from .views import HomePageView

# Create your tests here.
class HomepageTests(SimpleTestCase):
    def setUp(self):
        url = reverse('home')
        self.response = self.client.get(url)

    def test_url_exists_at_correct_location(self):
        #response = self.client.get('/')
        self.assertEqual(self.response.status_code, 200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)

    def test_homepage_template(self):
        #response = self.client.get('/')
        self.assertTemplateUsed(self.response, 'home.html')

    def test_homepage_contains_correct_html(self):
        #response = self.client.get('/')
        self.assertContains(self.response, 'home page')

    def test_homepage_does_not_contain_incorect_html(self):
        #response = self.client.get('/')
        self.assertNotContains(self.response,'Hi there! Should not be on the page.')

    def test_homepage_url_resolves_homepageview(self):
        view = resolve('/')
        self.assertEqual(view.func.__name__,HomePageView.as_view().__name__)

  • Lakukan test:
docker-compose exec web python manage.py test pages
  • Jika berhasil tidak ada error maka akan menghasilkan output
Found 6 test(s).
System check identified no issues (0 silenced).
......
----------------------------------------------------------------------
Ran 6 tests in 0.037s

OK
  • asda
  • asdas
  • s

Demkian langkah-langkah membuat aplikasi Django dan PostgreSQL dengan menggunakan Docker sederhana, semoga menambah pengetahuan. @wawanhn

Friday, August 19, 2022

Membuka Web Browser dengan Python



Dengan menggunakan library webbrowser dapat membuat skrip untuk membuka halaman web dengan Python. Kode skrip yang digunakan adalah sebagai berikut (sangat simple):


import webbrowser

url = input("Input URL: ")

webbrowser.open(url)


Import webbrowser memangggil library webbrowser yang menyediakan fungsi untuk membuka webbrowser. Kemudian dibuat variable url yang berisi input halaman web yang akan dibuka. Dan terkahir perintah webbroser.open adalah untuk membuka halaman web dengan menggunakan browser yang terdapat dalam komputer kita.

Oke demikian, sangat simpel dan semoga bermanfaat. @wawanhn


Referensi:
- www.clcoding.com
- https://twitter.com/clcoding/status/1561889221526269952

Tuesday, August 16, 2022

Konversi File Word ke PDF dengan Menggunakan Python

PyCharm Logo


Dengan menggunakan Python kita bisa dengan mudah melakukan konversi file dokumen word atau docx mejadi file dokumen pdf. Salah satu library atau package di Python yang bisa digunakan adalah docx2pdf. Namun hal yang harus di ingat dalam menggunakan ini adalah aplikasi microsoft word harus sudah terintall dalam sistem operasi kita. Dalam hal ini saya berhasil menggunakan Windows & Mac yang sudah terinstall aplikasi Microsoft Word. Saat menggunakan Kaggle belum berhasil dijalankan karena dalam sistem tersebut belum terinstall aplikasi word. Warning error di Kaggle adalah docx2pdf is not implemented for linux as it requires Microsoft Word to be installed.

Oke saat ini saya akan coba membuat aplikasi konversi file docx ke pdf dengan menggunakan PyCharm yang terdapat dalam sistem informasi Windows. Caranya adalah sebagai berikut:

- Buka aplikasi PyCharm, jika pertama kali maka kita buat working project baru.

- Kemudian klik menu File -> Settings, pada bagian Project pilih Project Interpreter lalu klik tanda + Install Alt +Insert


- Ketikan doxc2pdf, lalu pilih button Install Package pada bagian bawah, tunggu sampai proses instalasi selesai lalu klik OK.

- Selanjutnya buat file python baru, dan masukan kode program sebagai berikut


from docx2pdf import convert
doxc = 'Test File.docx'
pdf = 'Test.pdf'
convert(doxc,pdf)


- Dengan catatan silahkan sesuai path dari file docx dan pdf hasil konversi.

- Kemudian run kode program, dan jika kode program kita benar maka akan dibuat satu file dokumen pdf dengan nama Test.pdf di komputer kita.

Cukup simpel dan mudahkan? oke terima kasih sudah menyimak, semoga bermanfaat. @wawanhn

Referensi:

- https://pypi.org/project/docx2pdf/

- https://medium.com/@nutanbhogendrasharma/convert-word-file-to-pdf-html-and-pdf-to-jpg-png-in-python-2e5da4f6a2fb

Konversi File Pdf ke Word dengan Menggunakan Python

Konversi File Pdf ke Word dengan Menggunakan Python

Dengan menggunakan bahasa Python kita bisa melakukan konversi dokumen pdf menjadi dokumen word dengan menggunakan library pdf2docx. 

Berikut cara membuat file file dokumen docx dari hasil konversi file format pdf. Dalam contoh ini saya gunakan notebook dari Kaggle. Silahkan buka web Kaggle kemudian buat notebook baru dengan cara klik menu < >Code disebelah kiri lalu klik New Notebook dan tuliskan kode perintah dalam cell sebagai berikut:


from pdf2docx import Converter

pdf_file = '../input/file pdf.pdf'

docx_file = './test.docx'

cv = Converter(pdf_file)

cv.convert(docx_file)

cv.close()


Kemudian Run current cell atau tekan Ctrl + Enter dan tunggu proses sampai konversi selesai dilakukan. Jika berhasil maka akan dibuat satu file test.docx di Data pada folder Output/Working.

Jika terdapat error karena package pdf2docx belum terinstall maka lakukan instalasi package pdf2docx dengan menggunakan perintah:


!pip install pdf2docx


Dengan catatan kita harus mengaktifkan atau enable Internet di bagian Settings di menu sebelah kanan.  

Oke cukup simpel kan bagaimana konversi file pdf ke docx dengan menggunakan library/package pdf2docx di Python.

Terima kasih sudah menyimak semoga bermanfaat. @wawanhn


Referensi:

https://www.clcoding.com/2022/08/day-83-convert-pdf-to-docx-using-python.html



Wednesday, June 10, 2020

Alternatif IDE untuk Programming Python di Linux dan Windows

Alternatif IDE untuk Programming Python di Linux dan Windows
Saya akan berbagi list IDE yang bisa digunakan dalam membuat pemrograman menggunakan python yang sangat handal dan bisa digunakan di Windows dan Linux.

1. Visual Studio Code



Bisa di download disini Download

2. Atom

Bisa di download disini Download

3.  Anaconda



Bisa di download disini Download

Semoga bermanfaat. @wawanhn

Referensi:
https://linuxhint.com/python_ide_ubuntu/

Friday, April 12, 2019

Analisis Geospatial menggunakan Python Bagian 4 - Konversi SHP ke PostgrSQL

Analisis Geospatial menggunakan Python Bagian 4 - Konversi SHP ke PostgrSQL
Saat ini kita lanjutkan setelah dibuat geodatabase py_geo_db di POstgreSQL sebelumnya. Kita akan mengkonversi file shapefile ke dalam geodatabase PostgreSQL.

Dalam contoh ini saya akan menggunakan dengan format shapefile. Anda bisa mengganti file shp dengan file anda sendiri. Berikut contoh kode programnya sebagai berikut:

# -*- coding: utf-8 -*-
"""
Created on Fri Apr 12 09:36:42 2019

@author: Wawan H Nur
Mengkonversi file shp BatasKabupaten.shp ke database py_geo_db di PostgreSQL
"""

import subprocess

db_schema = "SCHEMA=geodata"
overwrite_option = "OVERWRITE=YES"
geom_type = "POLYGON"
output_format = "PostgreSQL"

db_connection = """PG:host=localhost port=5432 user=userwhn dbname=py_geo_db password=pwdwhn"""
                         
input_shp = "../geodata/BatasKabupaten.shp"

subprocess.call(["ogr2ogr", "-lco", db_schema, "-lco", overwrite_option, "-nlt", geom_type, "-f", output_format, db_connection, input_shp])

Penjelasan dari kode program tersebut adalah melakukan konversi file shp dengan nama BatasKabupaten.shp yang mempunyai tipe geometri polygon kedalam geodatabase py_geo_db pada schema geodata. Kode skrip tersebut akan menghasilkan sebuah tabel BatasKabupaten di database py_geo_db pada schema geodata. Output format yang akan kita tuju PostgreSQL.

Untuk melihat layer hasil konversi dapat dilakukan dengan menggunakan QGIS. 




Untuk tipe geometri terdapat beberapa format dengan contoh datanya sebagai berikut:
  • POINT(0 0)
  • LINESTRING(0 0,1 1,1 2)
  • POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
  • MULTIPOINT(0 0,1 2)
  • MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))
  • MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
  • GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4)))
Selain dengan menggunakan kode program Python, kia dapat langsung melakukan konversi file shp dengan manggunakan command prompt dengan memanfaatkan fungsi shp2pgsql yang terdapat dalam instalasi PostgreSQL. Yaitu dengan cara di command prompt kita menuju folder bin dalam installan PostgreSQL kita. Kode perintah yang dapat digunakan untuk mengkonersi file shp seperti contoh diatas seperti ditampilkan di bawah ini:

shp2pgsql -g localhost -s 4532 -c -D -I D:/Virt/data/BatasKabupaten.shp geodata.BatasKabupaten | psql -U userwhn py_geo_db

Adapun bentuk umum kode konversi file shp diatas adalah:

shp2pgsql -g <host> -s <port> -c -D -I <lokasi file shp> <schema.tabel> | psql -U <user> <database>

Demikian tulisan singkat ini semoga bermanfaat dan akan dilanjutkan dengan bahasan selanjutnya, terima kasih. @wawanhn

Referensi: 
https://pcjericks.github.io/py-gdalogr-cookbook/vector_layers.html?highlight=shp#get-all-postgis-layers-in-a-postgresql-database

https://automating-gis-processes.github.io/CSC18/index.html


https://medium.com/@chrieke/essential-geospatial-python-libraries-5d82fcc38731


http://postgis.refractions.net/documentation/manual-1.3/ch04.html