Mã của tôi bị kẹt ở clean_up()
phương thức trongMyClass()
my_group.py:
import os
import pandas as pd
import psycopg2, pymysql, pyodbc
from db_credentials_dict import db_credentials
class MyClass():
def __init__(self, from_database, to_table_name, report_name):
...
def get_sql(self):
...
def get_connection(self):
...
def query_to_csv(self):
...
def csv_to_postgres(self):
...
def extract_and_load(self):
self.query_to_csv()
self.csv_to_postgres()
def get_final_sql(self):
...
def postgres_to_csv(self):
...
def clean_up(self):
print('\nTruncating {}...'.format(self.to_table_name), end='')
with self.postgres_connection.cursor() as cursor:
cursor.execute("SELECT NOT EXISTS (SELECT 1 FROM %s)" % self.to_table_name)
empty = cursor.fetchone()[0]
if not empty:
cursor.execute("TRUNCATE TABLE %s" % self.to_table_name)
self.postgres_connection.commit()
print('DONE')
print('Removing {}...'.format(self.filename), end='')
if os.path.exists(self.filepath):
os.remove(self.filepath)
print('DONE')
else:
print('{} does not exist'.format(self.filename))
chính:
from my_class import MyClass
from time import sleep
bookings = MyClass(from_database='...',to_table_name='...',report_name='...')
bookings2 = MyClass(from_database='...',to_table_name='...',report_name='...')
channel = MyClass(from_database='...',to_table_name='...',report_name='...')
cost = MyClass(from_database='...',to_table_name='...',report_name='...')
tables = [bookings, bookings2, channel, cost]
for table in tables:
table.extract_and_load()
daily_report = MyClass(from_database='...',to_table_name='...',report_name='...')
daily_report.postgres_to_csv()
sleep(10)
for table in tables:
table.clean_up()
Khi tôi chạy, main.py
nó chạy mọi thứ cho đến vòng lặp cuối cùng for table in tables: table.clean_up()
. Nó chỉ bị mắc kẹt ở đó, không có lỗi hoặc cảnh báo.
Khi chạy phương thức đó, nó hoạt động tốt, tức là nó cắt các bảng postgres. Cần trợ giúp để làm việc này và hiểu lý do tại sao phương thức cuối cùng không thực thi khi tất cả các phương thức khác được thực thi.
Đầu ra của khi tự chạy clean_up()
:
Truncating bookings...DONE
Removing bookings.csv...DONE
Truncating bookings2...DONE
Removing bookings2.csv...DONE
Truncating channel...DONE
Removing channel.csv...DONE
Truncating cost...DONE
Removing cost.csv...DONE
Mã tổng thể làm gì:
- Lấy các tệp có chứa các truy vấn sql trích xuất dữ liệu từ các cơ sở dữ liệu khác nhau và thực hiện các truy vấn đó.
- Xuất chúng sang csv
- Nhập csv vào cơ sở dữ liệu postgres
- Viết một truy vấn postgres mang dữ liệu lại với nhau và sau đó xuất dưới dạng csv được sử dụng trong công cụ BI để trực quan hóa dữ liệu
- Cắt bớt dữ liệu trong postgres và xóa các tệp csv ở điểm 2
Có lẽ bạn đang nghĩ rằng đây là một sự điên rồ và tôi đồng ý. Tôi hiện đang thực hiện với những gì tôi đã nhận và không thể lưu trữ dữ liệu trên máy tính của mình vì đó là dữ liệu của công ty (do đó việc cắt và xóa dữ liệu).