import mysql connector.
from import datetime datetime timedelta,
conn = mysql connector. .connect(
,host="localhost"
,user="root"
,password=""
database="btlttql"
)
cursor conn dictionary = .cursor( =True)
cursor. )execute("SELECT MIN(DATE(created_at)) AS first_date FROM orders"
first_date cursor = . ()[ ]fetchone "first_date"
if not first_date:
)print("Khong co don hang"
exit()
today = datetime.today date(). ()
yesterday today days = - timedelta( =1)
current_date first_date =
while current_date yesterday <= :
report_date_str = current_date. )strftime('%Y-%m-%d'
)print(f"Dang xu ly: {report_date_str}"
# Truy vấ!n các chỉE số!
cursor.execute("SELECT COUNT(*) as total_views FROM page_views WHERE
DATE(viewed_at) = %s", (report_date_str,))
total_views = cursor.fetchone()[ ]"total_views"
cursor.execute("SELECT COUNT(*) as total_new_users FROM users WHERE
DATE(created_at) = %s", (report_date_str ,))
total_new_users = cursor.fetchone()[ ]"total_new_users"
cursor.execute("SELECT COUNT(*) as total_orders FROM orders WHERE
DATE(created_at) = %s", (report_date_str ,))
total_orders = cursor.fetchone()[ ]"total_orders"
cursor.execute("SELECT COUNT(*) as completed_orders FROM orders WHERE
DATE(created_at) = AND status = 'completed'"%s , (report_date_str,))
completed_orders = cursor.fetchone()[ ]"completed_orders"
cursor.execute("SELECT COUNT(*) as pending_orders FROM orders WHERE
DATE(created_at) = AND status = 'pending'"%s , (report_date_str,))
pending_orders = cursor. ()[ ]fetchone "pending_orders"
cursor.execute("SELECT COUNT(*) as processing_orders FROM orders
WHERE DATE(created_at) = AND status = 'processing'"%s ,
(report_date_str,))
processing_orders = cursor. ()[ ]fetchone "processing_orders"
cursor.execute("SELECT COUNT(*) as canceled_orders FROM orders WHERE
DATE(created_at) = AND status = 'canceled'"%s , (report_date_str,))
canceled_orders = cursor.fetchone()[ ]"canceled_orders"
cursor.execute("""
SELECT COUNT(DISTINCT user_id) as user_visitor
FROM page_views
WHERE DATE(viewed_at) = AND is_authenticated = 1%s
""", (report_date_str ,))
user_visitor = cursor.fetchone()[ ]"user_visitor"
cursor.execute("""
SELECT SUM(final_amount) as total_sales
FROM orders
WHERE DATE(created_at) = AND status = 'completed'%s
""", (report_date_str ,))
] total_sales = cursor.fetchone()["total_sales" or 0
cursor.execute("""
SELECT SUM(oi.quantity * p.import_price) as total_cost
FROM orders o
JOIN order_items oi ON o.id = oi.order_id
JOIN products p ON oi.product_id = p.id
WHERE DATE(o.created_at) = AND o.status = 'completed'%s
""", (report_date_str ,))
] total_cost = cursor. ()[fetchone "total_cost" or 0
profit = total_sales - total_cost
, ) conversion_rate = round(total_orders / user_visitor 2 if
user_visitor else 0
, ) avg_order_value = round(total_sales / total_orders 2 if
total_orders else 0
, ) avg_profit_per_order = round(profit / total_orders 2 if
total_orders else 0
, ) cancel_rate = round(canceled_orders / total_orders 2 if
total_orders else 0
# Lấ!y saEn phấEm top doanh thu
cursor.execute("""
SELECT p.name AS product_name, SUM(oi.quantity * oi.price) AS
revenue
FROM order_items oi
JOIN orders o ON oi.order_id = o.id
JOIN products p ON oi.product_id = p.id
WHERE DATE(o.created_at) = AND o.status = 'completed'%s
GROUP BY p.id
ORDER BY revenue DESC
LIMIT 1
""", (report_date_str ,))
result = cursor. ()fetchone
] top_product_name = result["product_name" if result else None
] top_product_sales = result["revenue" if result else 0
# Ghi vào baEng (cập nhật nê!u đã có)
cursor.execute("""
INSERT INTO reports_business (
report_date, total_views, total_new_users, total_orders,
completed_orders,
pending_orders,processing_orders, canceled_orders,
user_visitor, total_sales, profit,
conversion_rate, avg_order_value, avg_profit_per_order,
cancel_rate,
top_product_name, top_product_sales
) VALUES (
, , , , , , , , , , , , , , , %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s
%s %s,
)
ON DUPLICATE KEY UPDATE
total_views = VALUES(total_views),
total_new_users = VALUES(total_new_users),
total_orders = VALUES(total_orders),
completed_orders = VALUES(completed_orders),
pending_orders = VALUES(pending_orders),
processing_orders = VALUES(processing_orders),
canceled_orders = VALUES(canceled_orders),
user_visitor = VALUES(user_visitor),
total_sales = VALUES(total_sales),
profit = VALUES(profit),
conversion_rate = VALUES(conversion_rate),
avg_order_value = VALUES(avg_order_value),
avg_profit_per_order = VALUES(avg_profit_per_order),
cancel_rate = VALUES(cancel_rate),
top_product_name = VALUES(top_product_name),
top_product_sales = VALUES(top_product_sales)
""", (
, , , , report_date_str total_views total_new_users total_orders
completed_orders,
, , , pending_orders processing_orders, canceled_orders user_visitor
total_sales profit, ,
, , , conversion_rate avg_order_value avg_profit_per_order
cancel_rate,
, top_product_name top_product_sales
))
conn.commit()
)current_date += timedelta(days=1
print( )"Hoan Thanh"
cursor. ()close
conn.close()

Preview text:

import mysql.connector
from datetime import datetime, timedelta
conn = mysql.connector.connect(   host="localhost",   user="root",   password="",   database="btlttql" )
cursor = conn.cursor(dictionary=True) # Lấ! y ngày đấ% u tiên có đơn hàng
cursor.execute("SELECT MIN(DATE(created_at)) AS first_date FROM orders")
first_date = cursor.fetchone()["first_date"] if not first_date:
  print("Khong co don hang")   exit()
today = datetime.today().date()
yesterday = today - timedelta(days=1) current_date = first_date
while current_date <= yesterday:
  report_date_str = current_date.strftime('%Y-%m-%d')
  print(f"Dang xu ly: {report_date_str}")   # Truy vấ! n các chỉ E số!
  cursor.execute("SELECT COUNT(*) as total_views FROM page_views WHERE
DATE(viewed_at) = %s", (report_date_str,))
  total_views = cursor.fetchone()["total_views"]
  cursor.execute("SELECT COUNT(*) as total_new_users FROM users WHERE
DATE(created_at) = %s", (report_date_str,))
  total_new_users = cursor.fetchone()["total_new_users"]
  cursor.execute("SELECT COUNT(*) as total_orders FROM orders WHERE
DATE(created_at) = %s", (report_date_str,))
  total_orders = cursor.fetchone()["total_orders"]
  cursor.execute("SELECT COUNT(*) as completed_orders FROM orders WHERE
DATE(created_at) = %s AND status = 'completed'", (report_date_str,))
  completed_orders = cursor.fetchone()["completed_orders"]
  cursor.execute("SELECT COUNT(*) as pending_orders FROM orders WHERE
DATE(created_at) = %s AND status = 'pending'", (report_date_str,))
  pending_orders = cursor.fetchone()[ ] "pending_orders"
  cursor.execute("SELECT COUNT(*) as processing_orders FROM orders
WHERE DATE(created_at) = %s AND status = 'processing'", (report_date_str,))
  processing_orders = cursor.fetchone()["processing_orders"]  
  cursor.execute("SELECT COUNT(*) as canceled_orders FROM orders WHERE
DATE(created_at) = %s AND status = 'canceled'", (report_date_str,))
  canceled_orders = cursor.fetchone()["canceled_orders"]   cursor.execute("""
    SELECT COUNT(DISTINCT user_id) as user_visitor
    FROM page_views
    WHERE DATE(viewed_at) = %s AND is_authenticated = 1
  """, (report_date_str,))
  user_visitor = cursor.fetchone()["user_visitor"]   cursor.execute("""
    SELECT SUM(final_amount) as total_sales     FROM orders
    WHERE DATE(created_at) = %s AND status = 'completed'
  """, (report_date_str,))
  total_sales = cursor.fetchone()["total_sales"] or 0   cursor.execute("""
    SELECT SUM(oi.quantity * p.import_price) as total_cost     FROM orders o
    JOIN order_items oi ON o.id = oi.order_id
    JOIN products p ON oi.product_id = p.id
    WHERE DATE(o.created_at) = %s AND o.status = 'completed'
  """, (report_date_str,))
  total_cost = cursor.fetchone()["total_cost"] or 0
  profit = total_sales - total_cost
  conversion_rate = round(total_orders / user_visitor, 2) if user_visitor else 0
  avg_order_value = round(total_sales / total_orders, 2) if total_orders else 0
  avg_profit_per_order = round(profit / total_orders, 2) if total_orders else 0
  cancel_rate = round(canceled_orders / total_orders, 2) if total_orders else 0   # Lấ! y sa En phấE m top doanh thu   cursor.execute("""
    SELECT p.name AS product_name, SUM(oi.quantity * oi.price) AS revenue
    FROM order_items oi
    JOIN orders o ON oi.order_id = o.id
    JOIN products p ON oi.product_id = p.id
    WHERE DATE(o.created_at) = %s AND o.status = 'completed'     GROUP BY p.id
    ORDER BY revenue DESC     LIMIT 1
  """, (report_date_str,))
  result = cursor.fetchone()
  top_product_name = result["product_name"] if result else None
  top_product_sales = result["revenue"] if result else 0   # Ghi vào ba Eng (cập nhật nê! u đã có)   cursor.execute("""
    INSERT INTO reports_business (
      report_date, total_views, total_new_users, total_orders, completed_orders,
      pending_orders,processing_orders, canceled_orders,
user_visitor, total_sales, profit,
      conversion_rate, avg_order_value, avg_profit_per_order, cancel_rate,
      top_product_name, top_product_sales     ) VALUES (
      %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s     )
    ON DUPLICATE KEY UPDATE
      total_views = VALUES(total_views),
      total_new_users = VALUES(total_new_users),
      total_orders = VALUES(total_orders),
      completed_orders = VALUES(completed_orders),
      pending_orders = VALUES(pending_orders),
      processing_orders = VALUES(processing_orders),
      canceled_orders = VALUES(canceled_orders),
      user_visitor = VALUES(user_visitor),
      total_sales = VALUES(total_sales),
      profit = VALUES(profit),
      conversion_rate = VALUES(conversion_rate),
      avg_order_value = VALUES(avg_order_value),
      avg_profit_per_order = VALUES(avg_profit_per_order),
      cancel_rate = VALUES(cancel_rate),
      top_product_name = VALUES(top_product_name),
      top_product_sales = VALUES(top_product_sales)   """, (
    report_date_str, total_views, total_new_users, total_orders, completed_orders,
    pending_orders,processing_orders, canceled_orders, user_visitor, total_sales, profit,
    conversion_rate, avg_order_value, avg_profit_per_order, cancel_rate,
    top_product_name, top_product_sales   ))   conn.commit()
  current_date += timedelta(days=1) print("Hoan Thanh") cursor.close() conn.close()