Access’den PostgreSQL’e Tablo Aktarma
Bu yazıda, excel ve python aracılığıyla Access DB’deki, bir tablonun postgresql’e aktarılması anlatılmaktadır.
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.
İlgili tabloyu seçtikten sonra “Dış Veri” menüsünü seçiyoruz. Buradan Excel’i tıklıyoruz. Tamam diyerek Excel dosyasını kaydediyoruz.
Bunu yapmak zorundayız, çünkü PostgreSQL’deki ve Excel dosyasındaki sütun adları tutarlı olmak zorunda!
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ı UTF-8 formatında csv dosyası olarak kaydediyoruz
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ç 😊
Sadece kopyala ve yapıştır😊 Yaşasın python.
Sonuç: Başarı!!!
Bu yazıda, excel ve python aracılığıyla Access DB’deki, bir tablonun postgresql’e aktarılması anlatılmaktadır.
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.
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.