Access'den PostgreSQL'e Tablo Aktarma

İçerik Tablosu

Access’den PostgreSQL’e Tablo Aktarma

Merhaba,

Bir müşterim için, 2014 yılında personel maaşlarını hesaplamasına yardımcı olması için MS Access veri tabanını kullanarak VBA ile bir program yazmıştım. Şu anda ise aynı müşterim için halihazırda çalıştığı bu “Personel Takip Sistemi’ni Python Django ve PostgreSQL ile yeniden yapıyorum.

Projeyi Django ile yeniden inşa ederken, Access veri tabanındaki tabloları PostgreSQL’e aktarmam gerekti. İnternette programları araştırdığımda, üçüncü parti uygulamalar buldum. Bunlara da güvenemedim.

En nihayetinde ben bir yazılımcıyım ve elimde Python gibi güçlü bir dil var.

Neden işimi kolaylaştıracak kodları ben oluşturmayayım?

Bu kodları yazarken personel bilgilerini Access DB’den PostgreSQL’e aktardım. Kişisel verilerin gizliliğini sağlamak için bu yazıda personel maaşlarının bulunduğu verileri

Sonuçta PGAdmin ile ilgili tabloya insert scripti ile kaç tane kayıt varsa hepsini ekleyebilirim. Sorgu penceresine alt alta tüm kayıtları yazıp sorguyu çalıştırdığımda tüm kayıtlar eklenecektir. Tabii ki verinin PostgreSQL ile uyumlu olması koşuluyla. Burada yapacağım şey, Access DB’deki veriyi Python’da işleyip sorgu scriptlerini bit metin dosyasına yazdırmak.

 Şu adımları izlemem, küçük ölçekli bir projeyi yaparken, Access tablolarını PostgreSQL’e aktarmamda oldukça kolaylık sağlayacaktır.

  1. Access DB’den ilgili tablonun Excel tablosu olarak kaydedilmesi,
  2. Excel tablosunda sütun adlarının güncellenmesi (PostgreSQL’de tanımlı sütun adları, Access DB’dekinden farklı ise.)
  3. Verilerin düzenlenmesi (Tarih alanlarının PostgreSQL tarih formatında olması, NULL değerler vs.)
  4. Excel dosyasının CSV dosyası olarak kaydedilmesi.
  5. Kaydedilen CSV dosyasının Python Pandas kütüphanesi ile veri çerçevesine dönüştürülmesi, veri çerçevesinin satır ve sütun değerlerinde döngü kurularak verinin insert scripti olarak yazılması ve scriptin bir txt dosyasına satır olarak kaydedilmesi,
  6. Txt dosyasından scriptlerin kopyalanması ve PGAdmin sorgu penceresine yapıştırılarak run edilmesi.

Access DB’den ilgili tablonun Excel tablosu olarak kaydedilmesi:

İlgili tabloyu seçtikten sonra “Dış Veri” menüsünü seçiyoruz. Buradan Excel’i tıklıyoruz. Tamam diyerek Excel dosyasını kaydediyoruz.

Excel tablosunda sütun adlarının güncellenmesi

Bunu yapmak zorundayız, çünkü PostgreSQL’deki ve Excel dosyasındaki sütun adları tutarlı olmak zorunda!

Verilerin düzenlenmesi

Excel tablosunda sadece “change_date” sütunu tarih formatındadır. Bu formatı metin olarak kaydetmek zorundayız. PostgreSQL formatı “YYYY-AA-GG” şeklinde. Bunun için Excel’in metneçevir fonksiyonunu kullanabiliriz. Formül aşağıdaki gibi olacaktır. Tabii benim kullandığım excel Türkçe dilinde. İngilizce kullananlar “YYYY-MM-DD” yazmalılar!

YYYY -> Yıl, 2026

AA-> Ay, 03

GG->Gün,23

Doldurma kulpu ile tüm sütunu metne çeviriyoruz. Sonra da “change_date” sütununa yeniden yapıştırıyoruz. Excel dosyası aşağıdaki gibi değişecektir. Maaşlar da Excel para formatında. Bunu da sayıya çevirmemiz gerekiyor.

Excel dosyasının CSV dosyası olarak kaydedilmesi.

Excel dosyasını UTF-8 formatında csv dosyası olarak kaydediyoruz

Kaydedilen CSV dosyasının Python Pandas kütüphanesi ile veri çerçevesine dönüştürülmesi, veri çerçevesinin satır ve sütun değerlerinde döngü kurularak verinin insert scripti olarak yazılması ve scriptin bir txt dosyasına satır olarak kaydedilmesi,

Anaconda Spyder’da yeni bir proje oluşturalım. Bu proje klasörünün içine kaydettiğimiz “100_salarychange.csv” dosyasının görünümü aşağıdaki gibi olacaktır. Burada numerik değerlerdeki ondalıklar “ , “ (virgül) ile ayrılmış. Bu python’da “string” değer olarak gözükecektir. Bunun önüne geçmek için metin düzenleyici ile “,” ifadesini “.” Olarak değiştirebilirsiniz.

Aşağıdaki kodlar, csv dosyasını SQL scriptine çevirip sql.txt isimli dosyaya kaydedecektir.

				
					# -*- coding: utf-8 -*-
"""
Created on Wed Jan 25 21:01:06 2023

@author: Murat Uğur KİRAZ
"""

import pandas as pd
import numpy as np
import os

#Parameters
access_to_postgre_csv_file = "100_salarychange.csv" # write down csv file
postgre_table_name = "public.personnel_salarychange"

# delete file if out output data exists
if os.path.exists("sql.txt"):
  os.remove("sql.txt")

# Import data from csv to pandas dataframe and if there is null data inside, fill them with "Null" string
data = pd.read_csv(access_to_postgre_csv_file, sep=";")
data = data.fillna("NULL")

#get the column and row number of the data
column_number = len(data.columns)
row_number = len(data)

# we will have column names and add column_str variable
column_names = list(data.columns.values)
column_str = ""
for column_name in column_names:
    column_str += column_name + ","
column_str = column_str[0:len(column_str)-1] # this will delete the last comma , ;)

# loop in columns and rows, append each row in appropriate PostgreSQL insert script format
# save in the sql.txt file
for i in range(row_number):
    row_str = ""
    for j in range(column_number):        
        #row_str += str(data.iloc[i,j]) + ","
        #print(type(data.iloc[i,j]), data.iloc[i,j])
        if type(data.iloc[i,j]) == np.str:
            if (data.iloc[i,j] == "NULL") or data.iloc[i,j] == "1900-01-00":
                row_str += "NULL, "
            else:
                row_str += "'" + str(data.iloc[i,j]) + "'" + ","
        else:
            row_str += str(data.iloc[i,j]) + ","
    row_str = row_str[0:len(row_str)-1]    
    sentence = "INSERT INTO {}({}) VALUES ({});\n".format(postgre_table_name, column_str, row_str)
    file = open("sql.txt" , "a", encoding=("UTF-8"))
    file.write(sentence)
    file.close()
    



				
			

Sql.txt dosyasının görünümü aşağıdaki gibi olacaktır. Bizim istediğimiz sonuç 😊

Txt dosyasından scriptlerin kopyalanması ve PGAdmin sorgu penceresine yapıştırılarak run edilmesi.

Sadece kopyala ve yapıştır😊 Yaşasın python.

Sonuç: Başarı!!!

Blog özeti

Bu yazıda, excel ve python aracılığıyla Access DB'deki, bir tablonun postgresql'e aktarılması anlatılmaktadır.

Yazar Hakkında

Diğer Yazılar

Tezim
Murat Uğur KİRAZ

Sonuç

Bu bölümde, RPL protokolüne yapılan Taşma Saldırısı, Azaltılmış Rank Saldırısı ve Sürüm Numarası Artırma Saldırısı “Karar Ağacı”, “Lojistik Regresyon”, “Rasgele Orman”, “Naive Bayes”, “K En Yakın Komşu” ve “Yapay Sinir Ağları” algoritmaları ile eğitilmiş ve test edilmiştir.

Taşma Saldırılarının tespitinde %97,2 doğruluk oranı ile Yapay Sinir Ağları algoritması, Sürüm Numarası Artırma Saldırılarının tespitinde %81 doğruluk oranı ile K En Yakın Komşu algoritması, Azaltılmış Rank saldırılarının tespitinde %58 doğruluk oranı ile Yapay Sinir Ağları algoritması başarı gösterdiği tespit edilmiştir.

Daha Fazla oku >>
Tezim
Murat Uğur KİRAZ

Makine Öğrenmesi Değerlerinin Yorumlanması

RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması başlıklı yüksek lisans tezimi nasıl yaptığımı, bu süreçte elde ettiğim tecrübelerimi ve bu tezdeki kodları bir yazı dizisi halinde blog sayfamda paylaşmaya devam ediyorum.

Şimdiye kadar, RPL protokolü ve RPL protokolünde gerçekleşen saldırılarla ilgili detaylı bilgi verdim. Sonrasında, Taşma Saldırıları, Sürüm Numarası Artırma Saldırısı ve Azaltılmış Rank Saldırısı ile ilgili deneyler yapıp, ham verileri elde ettim ve bu ham verileri anlamlı hale getirdim. Zafiyetli düğümlerle yapılan deney sonuçları ile, iyicil düğümlerle yapılan deney sonuçlarını istatistiksel metotlarla karşılaştırdım.

Bu bölümde ise makine öğrenmesi algoritmaları ile tespit ettiğimiz saldırıların sayısal sonuçlarını yorumlayacağım.

Daha Fazla oku >>

Yazıyı paylaşın

LinkedIn
Twitter