MySQL di Python3

1200px-MySQL.svg

Jarang banget saya menggunakan engine database yang satu ini, seringnya menggunakan engine NoSQL seperti mongo. Namun, kali ini beda, karena project ini tuntutan klien, dan klien familiar dengan MySQL ya sudah…

Di sini saya menggunakan Python3, library yang saya butuhkan:

  • mysqlclient
  • sqlalchemy
  • sqlalchemy_utils

Saya menggunakan ORM (sqlalchemy) untuk mempermudah kerja, daripada harus menulis raw query syntax, so painful…

Berikut ini contoh kode membuat database dan tabel:

from sqlalchemy import create_engine, MetaData
from sqlalchemy_utils import database_exists, create_database
from sqlalchemy import Column, DateTime, String, Integer, func
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

# create db if not exist
engine = create_engine("mysql://root:@localhost/subdhunter")
if not database_exists(engine.url):
    create_database(engine.url)

# create db model
class Domain(Base):
    __tablename__ = 'domain'
    id= Column(Integer, primary_key=True)
    domain_name = Column(String(100))
    domain_title = Column(String(250))
    domain_status = Column(Integer)
    real_domain_name = Column(String(100))
    created = Column(DateTime, default=func.now())

# create table
from sqlalchemy.orm import sessionmaker
session = sessionmaker()
session.configure(bind=engine)
Base.metadata.create_all(engine)

sdasd

Advertisements

Membatasi Pencarian Pada Kolom Tertentu di Django

Ini salah satu tips untuk melakukan query secara lebih efisien dan cepat, dalam kasus ini membatasi pencarian hanya pada kolom tertentu yang kita butuhkan. Misal saya ingin mencari nilai kolom id dari model Collection, maka query yang saya lakukan adalah:

from myapp.models import Collection

ids = Collection.objects.filter(done=True).values('id')

Tentang Caching di Django

Sedikit cerita tentang cache backend, saya menggunakan redis sebagai default cache backend di django, ini juga berarti redis saya gunakan untuk:

  • fungsi decorator cache_page
  • cache query database
  • dependensi python-rq
  • dependensi django-cachalot

Kejadian server bolak-balik mati karena service redis gagal terhubung, akhirnya saya ubah redis hanya untuk dependensi python-rq saja, selainnya saya menggunakan memcached. Dan untuk sementara problem error connection di redis teratasi.

[UPDATE]: Sampai saat ini, kurang lebih 12 jam sejak beralih dari redis ke memcached, problem redis error connection ndak muncul, semoga terus anteng si server.

Tentang Query Random

Sebenarnya tema optimasi ini tidak terbatas pada python/django aja sih, bisa bahasa apa pun. Kadangkala dalam sebuah project kita butuh untuk menampilkan data secara random, entah itu random user, random post maupun random-random lainnya. Jika data masih sedikit (< 50k rows) mungkin tidak terlalu masalah, namun akan menjadi masalah kalau data sudah di atas 50.000 baris dengan model relasi yang cukup kompleks. Bagaimana cara yang efisien?

Continue reading “Tentang Query Random”