diff --git a/__pycache__/md5.cpython-39.pyc b/__pycache__/md5.cpython-39.pyc new file mode 100644 index 0000000..c9272f9 Binary files /dev/null and b/__pycache__/md5.cpython-39.pyc differ diff --git a/customer.sql b/customer.sql new file mode 100644 index 0000000..3a8a175 --- /dev/null +++ b/customer.sql @@ -0,0 +1,89 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.0 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1:3307 +-- Generation Time: Mar 26, 2023 at 10:00 AM +-- Server version: 10.4.27-MariaDB +-- PHP Version: 8.2.0 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `source` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `customer` +-- + +CREATE TABLE `customer` ( + `CUST_CODE` varchar(6) NOT NULL, + `CUST_NAME` varchar(40) NOT NULL, + `CUST_CITY` char(30) DEFAULT NULL, + `WORKING_AREA` varchar(35) NOT NULL, + `CUST_COUNTRY` varchar(20) NOT NULL, + `GRADE` int(12) DEFAULT NULL, + `OPENING_AMT` int(12) NOT NULL, + `RECEIVE_AMT` int(12) NOT NULL, + `PAYMENT_AMT` int(12) NOT NULL, + `OUTSTANDING_AMT` int(12) NOT NULL, + `PHONE_NO` varchar(10) NOT NULL, + `AGENT_CODE` char(6) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `customer` +-- + +INSERT INTO `customer` (`CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`) VALUES +('C00001', 'Micheal', 'New York', 'New York', 'USA', 2, 3000, 5000, 2000, 6000, 'CCCCCCC', 'A008'), +('C00002', 'Bolt', 'New York', 'New York', 'USA', 3, 5000, 7000, 9000, 3000, 'DDNRDRH', 'A008'), +('C00003', 'Martin', 'Torento', 'Torento', 'Canada', 2, 8000, 7000, 7000, 8000, 'MJYURFD', 'A004'), +('C00004', 'Winston', 'Brisban', 'Brisban', 'Australia', 1, 5000, 8000, 7000, 6000, 'AAAAAAA', 'A005'), +('C00005', 'Sasikant', 'Mumbai', 'Mumbai', 'India', 1, 7000, 11000, 7000, 11000, '147-258963', 'A002'), +('C00006', 'Shilton', 'Torento', 'Torento', 'Canada', 1, 10000, 7000, 6000, 11000, 'DDDDDDD', 'A004'), +('C00007', 'Ramanathan', 'Chennai', 'Chennai', 'India', 1, 7000, 11000, 9000, 9000, 'GHRDWSD', 'A010'), +('C00008', 'Karolina', 'Torento', 'Torento', 'Canada', 1, 7000, 7000, 9000, 5000, 'HJKORED', 'A004'), +('C00009', 'Ramesh', 'Mumbai', 'Mumbai', 'India', 3, 8000, 7000, 3000, 12000, 'Phone No', 'A002'), +('C00010', 'Charles', 'Hampshair', 'Hampshair', 'UK', 3, 6000, 4000, 5000, 5000, 'MMMMMMM', 'A009'), +('C00011', 'Sundariya', 'Chennai', 'Chennai', 'India', 3, 7000, 11000, 7000, 11000, 'PPHGRTS', 'A010'), +('C00012', 'Steven', 'San Jose', 'San Jose', 'USA', 1, 5000, 7000, 9000, 3000, 'KRFYGJK', 'A012'), +('C00013', 'Holmes', 'London', 'London', 'UK', 2, 6000, 5000, 7000, 4000, 'BBBBBBB', 'A003'), +('C00014', 'Rangarappa', 'Bangalore', 'Bangalore', 'India', 2, 8000, 11000, 7000, 12000, 'AAAATGF', 'A001'), +('C00015', 'Stuart', 'London', 'London', 'UK', 1, 6000, 8000, 3000, 11000, 'GFSGERS', 'A003'), +('C00016', 'Venkatpati', 'Bangalore', 'Bangalore', 'India', 2, 8000, 11000, 7000, 12000, 'JRTVFDD', 'A007'), +('C00017', 'Srinivas', 'Bangalore', 'Bangalore', 'India', 2, 8000, 4000, 3000, 9000, 'AAAAAAB', 'A007'), +('C00018', 'Fleming', 'Brisban', 'Brisban', 'Australia', 2, 7000, 7000, 9000, 5000, 'NHBGVFC', 'A005'), +('C00019', 'Yearannaidu', 'Chennai', 'Chennai', 'India', 1, 8000, 7000, 7000, 8000, 'ZZZZBFV', 'A010'), +('C00020', 'Albert', 'New York', 'New York', 'USA', 3, 5000, 7000, 6000, 6000, 'BBBBSBB', 'A008'), +('C00021', 'Jacks', 'Brisban', 'Brisban', 'Australia', 1, 7000, 7000, 7000, 7000, 'WERTGDF', 'A005'), +('C00022', 'Avinash', 'Mumbai', 'Mumbai', 'India', 2, 7000, 11000, 9000, 9000, '113-123456', 'A002'), +('C00023', 'Karl', 'London', 'London', 'UK', 0, 4000, 6000, 7000, 3000, 'AAAABAA', 'A006'), +('C00024', 'Cook', 'London', 'London', 'UK', 2, 4000, 9000, 7000, 6000, 'FSDDSDF', 'A006'), +('C00025', 'Ravindran', 'Bangalore', 'Bangalore', 'India', 2, 5000, 7000, 4000, 8000, 'AVAVAVA', 'A011'); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `customer` +-- +ALTER TABLE `customer` + ADD PRIMARY KEY (`CUST_CODE`); +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/dds.sql b/dds.sql new file mode 100644 index 0000000..51cdf6c --- /dev/null +++ b/dds.sql @@ -0,0 +1,154 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.0 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1:3307 +-- Generation Time: Mar 26, 2023 at 04:48 PM +-- Server version: 10.4.27-MariaDB +-- PHP Version: 8.2.0 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `dds` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `dds_customer` +-- + +CREATE TABLE `dds_customer` ( + `CUSTOMER_RK` int(11) NOT NULL, + `CUST_CODE` varchar(6) NOT NULL, + `VALID_TO_DTTM` datetime NOT NULL, + `CUST_NAME` varchar(40) NOT NULL, + `CUST_CITY` char(30) DEFAULT NULL, + `WORKING_AREA` varchar(35) NOT NULL, + `CUST_COUNTRY` varchar(20) NOT NULL, + `GRADE` int(12) DEFAULT NULL, + `OPENING_AMT` int(12) NOT NULL, + `RECEIVE_AMT` int(12) NOT NULL, + `PAYMENT_AMT` int(12) NOT NULL, + `OUTSTANDING_AMT` int(12) NOT NULL, + `PHONE_NO` varchar(10) NOT NULL, + `AGENT_CODE` char(6) NOT NULL, + `VALID_FROM_DTTM` datetime DEFAULT NULL, + `PROCESSED_DTTM` datetime NOT NULL DEFAULT current_timestamp() +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `dds_customer` +-- + +INSERT INTO `dds_customer` (`CUSTOMER_RK`, `CUST_CODE`, `VALID_TO_DTTM`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`, `VALID_FROM_DTTM`, `PROCESSED_DTTM`) VALUES +(1, 'C00001', '2023-03-26 20:12:31', 'AAAA', 'New York', 'New York', 'USA', 2, 3000, 5000, 2000, 6000, 'CCCCCCC', 'A008', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(1, 'C00001', '5999-01-12 00:00:00', 'krupal', 'New York', 'New York', 'USA', 2, 3000, 5000, 2000, 6000, 'CCCCCCC', 'A008', '2023-03-26 20:12:31', '2023-03-26 20:12:31'), +(2, 'C00002', '5999-01-12 00:00:00', 'Bolt', 'New York', 'New York', 'USA', 3, 5000, 7000, 9000, 3000, 'DDNRDRH', 'A008', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(3, 'C00003', '5999-01-12 00:00:00', 'Martin', 'Torento', 'Torento', 'Canada', 2, 8000, 7000, 7000, 8000, 'MJYURFD', 'A004', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(4, 'C00004', '5999-01-12 00:00:00', 'Winston', 'Brisban', 'Brisban', 'Australia', 1, 5000, 8000, 7000, 6000, 'AAAAAAA', 'A005', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(5, 'C00005', '5999-01-12 00:00:00', 'Sasikant', 'Mumbai', 'Mumbai', 'India', 1, 7000, 11000, 7000, 11000, '147-258963', 'A002', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(6, 'C00006', '5999-01-12 00:00:00', 'Shilton', 'Torento', 'Torento', 'Canada', 1, 10000, 7000, 6000, 11000, 'DDDDDDD', 'A004', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(7, 'C00007', '5999-01-12 00:00:00', 'Ramanathan', 'Chennai', 'Chennai', 'India', 1, 7000, 11000, 9000, 9000, 'GHRDWSD', 'A010', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(8, 'C00008', '5999-01-12 00:00:00', 'Karolina', 'Torento', 'Torento', 'Canada', 1, 7000, 7000, 9000, 5000, 'HJKORED', 'A004', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(9, 'C00009', '5999-01-12 00:00:00', 'Ramesh', 'Mumbai', 'Mumbai', 'India', 3, 8000, 7000, 3000, 12000, 'Phone No', 'A002', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(10, 'C00010', '5999-01-12 00:00:00', 'Charles', 'Hampshair', 'Hampshair', 'UK', 3, 6000, 4000, 5000, 5000, 'MMMMMMM', 'A009', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(11, 'C00011', '5999-01-12 00:00:00', 'Sundariya', 'Chennai', 'Chennai', 'India', 3, 7000, 11000, 7000, 11000, 'PPHGRTS', 'A010', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(12, 'C00012', '5999-01-12 00:00:00', 'Steven', 'San Jose', 'San Jose', 'USA', 1, 5000, 7000, 9000, 3000, 'KRFYGJK', 'A012', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(13, 'C00013', '5999-01-12 00:00:00', 'Holmes', 'London', 'London', 'UK', 2, 6000, 5000, 7000, 4000, 'BBBBBBB', 'A003', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(14, 'C00014', '5999-01-12 00:00:00', 'Rangarappa', 'Bangalore', 'Bangalore', 'India', 2, 8000, 11000, 7000, 12000, 'AAAATGF', 'A001', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(15, 'C00015', '5999-01-12 00:00:00', 'Stuart', 'London', 'London', 'UK', 1, 6000, 8000, 3000, 11000, 'GFSGERS', 'A003', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(16, 'C00016', '5999-01-12 00:00:00', 'Venkatpati', 'Bangalore', 'Bangalore', 'India', 2, 8000, 11000, 7000, 12000, 'JRTVFDD', 'A007', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(17, 'C00017', '5999-01-12 00:00:00', 'Srinivas', 'Bangalore', 'Bangalore', 'India', 2, 8000, 4000, 3000, 9000, 'AAAAAAB', 'A007', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(18, 'C00018', '5999-01-12 00:00:00', 'Fleming', 'Brisban', 'Brisban', 'Australia', 2, 7000, 7000, 9000, 5000, 'NHBGVFC', 'A005', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(19, 'C00019', '5999-01-12 00:00:00', 'Yearannaidu', 'Chennai', 'Chennai', 'India', 1, 8000, 7000, 7000, 8000, 'ZZZZBFV', 'A010', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(20, 'C00020', '5999-01-12 00:00:00', 'Albert', 'New York', 'New York', 'USA', 3, 5000, 7000, 6000, 6000, 'BBBBSBB', 'A008', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(21, 'C00021', '5999-01-12 00:00:00', 'Jacks', 'Brisban', 'Brisban', 'Australia', 1, 7000, 7000, 7000, 7000, 'WERTGDF', 'A005', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(22, 'C00022', '5999-01-12 00:00:00', 'Avinash', 'Mumbai', 'Mumbai', 'India', 2, 7000, 11000, 9000, 9000, '113-123456', 'A002', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(23, 'C00023', '5999-01-12 00:00:00', 'Karl', 'London', 'London', 'UK', 0, 4000, 6000, 7000, 3000, 'AAAABAA', 'A006', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(24, 'C00024', '5999-01-12 00:00:00', 'Cook', 'London', 'London', 'UK', 2, 4000, 9000, 7000, 6000, 'FSDDSDF', 'A006', '2023-03-26 20:12:08', '2023-03-26 20:12:08'), +(25, 'C00025', '5999-01-12 00:00:00', 'Ravindran', 'Bangalore', 'Bangalore', 'India', 2, 5000, 7000, 4000, 8000, 'AVAVAVA', 'A011', '2023-03-26 20:12:08', '2023-03-26 20:12:08'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `dds_customer_inc` +-- + +CREATE TABLE `dds_customer_inc` ( + `CUSTOMER_RK` int(11) NOT NULL, + `CUST_CODE` varchar(6) NOT NULL, + `VALID_TO_DTTM` datetime NOT NULL, + `CUST_NAME` varchar(40) NOT NULL, + `CUST_CITY` char(30) DEFAULT NULL, + `WORKING_AREA` varchar(35) NOT NULL, + `CUST_COUNTRY` varchar(20) NOT NULL, + `GRADE` int(12) DEFAULT NULL, + `OPENING_AMT` int(12) NOT NULL, + `RECEIVE_AMT` int(12) NOT NULL, + `PAYMENT_AMT` int(12) NOT NULL, + `OUTSTANDING_AMT` int(12) NOT NULL, + `PHONE_NO` varchar(10) NOT NULL, + `AGENT_CODE` char(6) NOT NULL, + `VALID_FROM_DTTM` datetime DEFAULT NULL, + `PROCESSED_DTTM` datetime NOT NULL DEFAULT current_timestamp() +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `dds_customer_inc` +-- + +INSERT INTO `dds_customer_inc` (`CUSTOMER_RK`, `CUST_CODE`, `VALID_TO_DTTM`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`, `VALID_FROM_DTTM`, `PROCESSED_DTTM`) VALUES +(1, 'C00013', '5999-01-01 00:00:00', 'Holmes', 'London', 'London', 'UK', 2, 6000, 5000, 7000, 4000, 'BBBBBBB', 'A003', '2023-03-26 00:00:00', '2023-03-26 14:55:56'), +(2, 'C00001', '5999-01-01 00:00:00', 'Micheal', 'New York', 'New York', 'USA', 2, 3000, 5000, 2000, 6000, 'CCCCCCC', 'A008', '2023-03-26 00:00:00', '2023-03-26 14:59:58'), +(3, 'C00020', '5999-01-01 00:00:00', 'Albert', 'New York', 'New York', 'USA', 3, 5000, 7000, 6000, 6000, 'BBBBSBB', 'A008', '2023-03-26 00:00:00', '2023-03-26 14:59:58'), +(4, 'C00025', '5999-01-01 00:00:00', 'Ravindran', 'Bangalore', 'Bangalore', 'India', 2, 5000, 7000, 4000, 8000, 'AVAVAVA', 'A011', '2023-03-26 00:00:00', '2023-03-26 14:59:58'), +(5, 'C00024', '5999-01-01 00:00:00', 'Cook', 'London', 'London', 'UK', 2, 4000, 9000, 7000, 6000, 'FSDDSDF', 'A006', '2023-03-26 00:00:00', '2023-03-26 14:59:58'), +(6, 'C00015', '5999-01-01 00:00:00', 'Stuart', 'London', 'London', 'UK', 1, 6000, 8000, 3000, 11000, 'GFSGERS', 'A003', '2023-03-26 00:00:00', '2023-03-26 14:59:58'), +(7, 'C00002', '5999-01-01 00:00:00', 'Bolt', 'New York', 'New York', 'USA', 3, 5000, 7000, 9000, 3000, 'DDNRDRH', 'A008', '2023-03-26 00:00:00', '2023-03-26 14:59:58'); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `dds_customer` +-- +ALTER TABLE `dds_customer` + ADD PRIMARY KEY (`CUSTOMER_RK`,`VALID_TO_DTTM`); + +-- +-- Indexes for table `dds_customer_inc` +-- +ALTER TABLE `dds_customer_inc` + ADD PRIMARY KEY (`CUSTOMER_RK`); + +-- +-- AUTO_INCREMENT for dumped tables +-- + +-- +-- AUTO_INCREMENT for table `dds_customer` +-- +ALTER TABLE `dds_customer` + MODIFY `CUSTOMER_RK` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=26; + +-- +-- AUTO_INCREMENT for table `dds_customer_inc` +-- +ALTER TABLE `dds_customer_inc` + MODIFY `CUSTOMER_RK` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/md5.py b/md5.py new file mode 100644 index 0000000..307271a --- /dev/null +++ b/md5.py @@ -0,0 +1,6 @@ +import hashlib +import mysql.connector + +def hash(value): + result = hashlib.md5(value.encode()) + return result.hexdigest() \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e231d5a --- /dev/null +++ b/readme.md @@ -0,0 +1,32 @@ + +# SCD (Slow Changing Dimension) Type-2 + +To maintain history data. + + + +## 🔗 Links +[![portfolio](https://img.shields.io/badge/my_portfolio-000?style=for-the-badge&logo=ko-fi&logoColor=white)](https://krupalvora.github.io/) +[![linkedin](https://img.shields.io/badge/linkedin-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/krupalvora/) + + + +## Working + +- If record doesn't exists based on business keys, then insert record with respective falgs. + +- If record exists then track changes, close old record & open new record. + + + +## Authors + +- [@krupalvora](https://github.com/krupalvora) + + +## Tech Stack + +**Language:** Python, SQL + +**Other:** Hashing Algo (MD5) + diff --git a/scd.py b/scd.py new file mode 100644 index 0000000..334a4f9 --- /dev/null +++ b/scd.py @@ -0,0 +1,83 @@ +import hashlib +import mysql.connector +import datetime +from md5 import hash + +# GET VALUES FROM SRC +conn = mysql.connector.connect(host='localhost', database='source',user='sasdds', password='1234', port=3307) +source=conn.cursor(prepared=True) +source.execute("select CUST_CODE from CUSTOMER") +s=source.fetchall() +source.execute("select `CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE` from CUSTOMER") +st=source.fetchall() +conn.commit() +ss=str(s).replace(",)","").replace("(","").replace("[","").replace("]","").replace(" ","") + + +#GET VALUES FORM TARGET WITH MATCHING BUSINESS KEYS +conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) +dds=conn.cursor() +query=" select CUST_CODE from DDS_CUSTOMER where CUST_CODE in (" + ss +") AND VALID_TO_DTTM='5999-01-12 00:00:00'" +dds.execute(query) +d=dds.fetchall() +query=" select `CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE` ,CUSTOMER_RK from DDS_CUSTOMER where CUST_CODE in (" + ss +") AND VALID_TO_DTTM='5999-01-12 00:00:00'" +dds.execute(query) +dt=dds.fetchall() +conn.commit() + +#print(len(s) ,len(d) ) + +# if difference between src and dds is zero then +if len(s) <= len(d) : + upd_keys=set(s).union(set(d)) + upd_keys=list(zip(*upd_keys))[0] + for i in range(len(d)): # iter for each present key + update=[] + insert=[] + for j in range(len(dt)): + if dt[j][0] == upd_keys[i]: + tmp1= dt[j] + for j in range(len(st)): + if st[j][0] == upd_keys[i]: + tmp2= st[j] + h1,h2= hash(str(tmp1[:-1])),hash(str(tmp2)) + #print(h1,h2) + if h1==h2: + pass + else : + print(h1,h2,upd_keys[i]) + #update.append(dt[i] + (str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),)) + #insert.append(st[i] + ('5999-01-12',str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),)) + update=(str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),) + (upd_keys[i],) + conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) + upd_rec=conn.cursor(prepared=True) + query='''UPDATE `dds_customer` SET VALID_TO_DTTM=%s WHERE CUST_CODE=%s;''' + upd_rec.execute(query,update) + conn.commit() + + insert=tmp2 + ('5999-01-12',str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),) + (tmp1[len(tmp1)-1],) + print(insert) + conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) + insert_rec=conn.cursor(prepared=True) + query='''INSERT INTO `dds_customer` (`CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT` + , `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`, `VALID_TO_DTTM`, `VALID_FROM_DTTM`, CUSTOMER_RK) + VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);''' + insert_rec.execute(query,insert) + conn.commit() +# if values in src are greater than dds then insert missing ones. +elif len(s) > len(d) : + ins_keys=list(set(s)-set(d)) + ins_keys=list(zip(*ins_keys))[0] + # i records to be insertd + insert =[] + for i in range(len(st)): + if st[i][0] in ins_keys: + insert.append(st[i] + ('5999-01-12',str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),)) + # Insert statement + conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) + insert_rec=conn.cursor(prepared=True) + query='''INSERT INTO `dds_customer` (`CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`, `VALID_TO_DTTM`, `VALID_FROM_DTTM`) + VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);''' + insert_rec.executemany(query,insert) + conn.commit() + diff --git a/source.sql b/source.sql new file mode 100644 index 0000000..286a01c --- /dev/null +++ b/source.sql @@ -0,0 +1,89 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.0 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1:3307 +-- Generation Time: Mar 26, 2023 at 04:48 PM +-- Server version: 10.4.27-MariaDB +-- PHP Version: 8.2.0 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `source` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `customer` +-- + +CREATE TABLE `customer` ( + `CUST_CODE` varchar(6) NOT NULL, + `CUST_NAME` varchar(40) NOT NULL, + `CUST_CITY` char(30) DEFAULT NULL, + `WORKING_AREA` varchar(35) NOT NULL, + `CUST_COUNTRY` varchar(20) NOT NULL, + `GRADE` int(12) DEFAULT NULL, + `OPENING_AMT` int(12) NOT NULL, + `RECEIVE_AMT` int(12) NOT NULL, + `PAYMENT_AMT` int(12) NOT NULL, + `OUTSTANDING_AMT` int(12) NOT NULL, + `PHONE_NO` varchar(10) NOT NULL, + `AGENT_CODE` char(6) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Dumping data for table `customer` +-- + +INSERT INTO `customer` (`CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`) VALUES +('C00001', 'krupal', 'New York', 'New York', 'USA', 2, 3000, 5000, 2000, 6000, 'CCCCCCC', 'A008'), +('C00002', 'Bolt', 'New York', 'New York', 'USA', 3, 5000, 7000, 9000, 3000, 'DDNRDRH', 'A008'), +('C00003', 'Martin', 'Torento', 'Torento', 'Canada', 2, 8000, 7000, 7000, 8000, 'MJYURFD', 'A004'), +('C00004', 'Winston', 'Brisban', 'Brisban', 'Australia', 1, 5000, 8000, 7000, 6000, 'AAAAAAA', 'A005'), +('C00005', 'Sasikant', 'Mumbai', 'Mumbai', 'India', 1, 7000, 11000, 7000, 11000, '147-258963', 'A002'), +('C00006', 'Shilton', 'Torento', 'Torento', 'Canada', 1, 10000, 7000, 6000, 11000, 'DDDDDDD', 'A004'), +('C00007', 'Ramanathan', 'Chennai', 'Chennai', 'India', 1, 7000, 11000, 9000, 9000, 'GHRDWSD', 'A010'), +('C00008', 'Karolina', 'Torento', 'Torento', 'Canada', 1, 7000, 7000, 9000, 5000, 'HJKORED', 'A004'), +('C00009', 'Ramesh', 'Mumbai', 'Mumbai', 'India', 3, 8000, 7000, 3000, 12000, 'Phone No', 'A002'), +('C00010', 'Charles', 'Hampshair', 'Hampshair', 'UK', 3, 6000, 4000, 5000, 5000, 'MMMMMMM', 'A009'), +('C00011', 'Sundariya', 'Chennai', 'Chennai', 'India', 3, 7000, 11000, 7000, 11000, 'PPHGRTS', 'A010'), +('C00012', 'Steven', 'San Jose', 'San Jose', 'USA', 1, 5000, 7000, 9000, 3000, 'KRFYGJK', 'A012'), +('C00013', 'Holmes', 'London', 'London', 'UK', 2, 6000, 5000, 7000, 4000, 'BBBBBBB', 'A003'), +('C00014', 'Rangarappa', 'Bangalore', 'Bangalore', 'India', 2, 8000, 11000, 7000, 12000, 'AAAATGF', 'A001'), +('C00015', 'Stuart', 'London', 'London', 'UK', 1, 6000, 8000, 3000, 11000, 'GFSGERS', 'A003'), +('C00016', 'Venkatpati', 'Bangalore', 'Bangalore', 'India', 2, 8000, 11000, 7000, 12000, 'JRTVFDD', 'A007'), +('C00017', 'Srinivas', 'Bangalore', 'Bangalore', 'India', 2, 8000, 4000, 3000, 9000, 'AAAAAAB', 'A007'), +('C00018', 'Fleming', 'Brisban', 'Brisban', 'Australia', 2, 7000, 7000, 9000, 5000, 'NHBGVFC', 'A005'), +('C00019', 'Yearannaidu', 'Chennai', 'Chennai', 'India', 1, 8000, 7000, 7000, 8000, 'ZZZZBFV', 'A010'), +('C00020', 'Albert', 'New York', 'New York', 'USA', 3, 5000, 7000, 6000, 6000, 'BBBBSBB', 'A008'), +('C00021', 'Jacks', 'Brisban', 'Brisban', 'Australia', 1, 7000, 7000, 7000, 7000, 'WERTGDF', 'A005'), +('C00022', 'Avinash', 'Mumbai', 'Mumbai', 'India', 2, 7000, 11000, 9000, 9000, '113-123456', 'A002'), +('C00023', 'Karl', 'London', 'London', 'UK', 0, 4000, 6000, 7000, 3000, 'AAAABAA', 'A006'), +('C00024', 'Cook', 'London', 'London', 'UK', 2, 4000, 9000, 7000, 6000, 'FSDDSDF', 'A006'), +('C00025', 'Ravindran', 'Bangalore', 'Bangalore', 'India', 2, 5000, 7000, 4000, 8000, 'AVAVAVA', 'A011'); + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `customer` +-- +ALTER TABLE `customer` + ADD PRIMARY KEY (`CUST_CODE`); +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/test.py b/test.py new file mode 100644 index 0000000..6d32915 --- /dev/null +++ b/test.py @@ -0,0 +1,84 @@ +import hashlib +import mysql.connector +import datetime +from md5 import hash + +# GET VALUES FROM SRC +conn = mysql.connector.connect(host='localhost', database='source',user='sasdds', password='1234', port=3307) +source=conn.cursor(prepared=True) +source.execute("select CUST_CODE from CUSTOMER") +s=source.fetchall() +source.execute("select `CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE` from CUSTOMER") +st=source.fetchall() +conn.commit() +ss=str(s).replace(",)","").replace("(","").replace("[","").replace("]","").replace(" ","") +#print(type(st)) + +#GET VALUES FORM TARGET +conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) +dds=conn.cursor() +query=" select CUST_CODE from DDS_CUSTOMER where CUST_CODE in (" + ss +")" +dds.execute(query) +d=dds.fetchall() +query=" select `CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE` ,CUSTOMER_RK from DDS_CUSTOMER where CUST_CODE in (" + ss +")" +dds.execute(query) +dt=dds.fetchall() +conn.commit() +print(dt[0]) + +print(len(s),len(d)) + +# if difference between src and dds is zero then +if len(s) <= len(d) : + upd_keys=set(s).union(set(d)) + upd_keys=list(zip(*upd_keys))[0] + #print(upd_keys) + update=[] + insert=[] + for i in range(len(d)): # iter for each present key + #print(upd_keys[i]) + for j in range(len(dt)): + if dt[j][0] == upd_keys[i]: + tmp1= dt[j] + for j in range(len(st)): + if st[j][0] == upd_keys[i]: + tmp2= st[j] + h1,h2= hash(str(tmp1[:-1])),hash(str(tmp2)) + print(h1,h2) + if h1==h2: + pass + else : pass + #update.append(dt[i] + (str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),)) + #insert.append(st[i] + ('5999-01-12',str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),)) + update=(str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),) + upd_keys[i] + insert=st[i] + ('5999-01-12',str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),) + conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) + upd_rec=conn.cursor(prepared=True) + query='''UPDATE `dds_customer` SET VALID_TO_DTTM=%s WHERE CUST_CODE=%s;''' + upd_rec.execute(query,update) + conn.commit() + insert_rec=conn.cursor(prepared=True) + query='''INSERT INTO `dds_customer` (`CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT` + # , `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`, `VALID_TO_DTTM`, `VALID_FROM_DTTM`) + VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);''' + insert_rec.execute(query,insert) + conn.commit() + + +elif len(s) > len(d) : + ins_keys=list(set(s)-set(d)) + ins_keys=list(zip(*ins_keys))[0] + # i records to be insertd + insert =[] + for i in range(len(st)): + if st[i][0] in ins_keys: + insert.append(st[i] + ('5999-01-12',str(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S')),)) + + # Insert statement + conn = mysql.connector.connect(host='localhost', database='dds',user='sasdds', password='1234', port=3307) + insert_rec=conn.cursor(prepared=True) + query='''INSERT INTO `dds_customer` (`CUST_CODE`, `CUST_NAME`, `CUST_CITY`, `WORKING_AREA`, `CUST_COUNTRY`, `GRADE`, `OPENING_AMT`, `RECEIVE_AMT`, `PAYMENT_AMT`, `OUTSTANDING_AMT`, `PHONE_NO`, `AGENT_CODE`, `VALID_TO_DTTM`, `VALID_FROM_DTTM`) + VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);''' + insert_rec.executemany(query,insert) + conn.commit() +