40 lines
1.9 KiB
Python
40 lines
1.9 KiB
Python
|
|
"""确认能耗报表"今日/本月"的时区口径。
|
|||
|
|
|
|||
|
|
背景:服务返回 today_energy=6000(= 2026-09-19 那天的数据),而本机 pymysql
|
|||
|
|
连接下 CURDATE() 是 2026-09-20。差异来自 **sqlx 会把 MySQL 会话时区设成 +00:00**
|
|||
|
|
(保证时间转换确定性),而普通客户端沿用服务器的默认会话时区。
|
|||
|
|
"""
|
|||
|
|
import pymysql
|
|||
|
|
|
|||
|
|
conn = pymysql.connect(host="10.8.0.252", user="root",
|
|||
|
|
password="Hbhyg731024@", database="pms_dev")
|
|||
|
|
cur = conn.cursor()
|
|||
|
|
|
|||
|
|
cur.execute("SELECT @@global.time_zone, @@session.time_zone, NOW(), CURDATE()")
|
|||
|
|
print("默认会话时区 :", cur.fetchone())
|
|||
|
|
|
|||
|
|
cur.execute("SET time_zone = '+00:00'")
|
|||
|
|
cur.execute("SELECT @@session.time_zone, NOW(), CURDATE()")
|
|||
|
|
print("模拟 sqlx(+00:00) :", cur.fetchone())
|
|||
|
|
|
|||
|
|
TODAY = "cr.start_time >= CURDATE() AND cr.start_time < CURDATE() + INTERVAL 1 DAY"
|
|||
|
|
THIS_MONTH = (
|
|||
|
|
"cr.start_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') "
|
|||
|
|
"AND cr.start_time < DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH, '%Y-%m-01')"
|
|||
|
|
)
|
|||
|
|
cur.execute(f"SELECT CAST(COALESCE(SUM(cr.energy),0) AS SIGNED) FROM charge_records cr WHERE {TODAY}")
|
|||
|
|
print("UTC 会话下 today :", cur.fetchone()[0], "(服务实测返回 6000 ✓)" if cur.rowcount else "")
|
|||
|
|
cur.execute(f"SELECT CAST(COALESCE(SUM(cr.energy),0) AS SIGNED) FROM charge_records cr WHERE {THIS_MONTH}")
|
|||
|
|
print("UTC 会话下 month :", cur.fetchone()[0], "(服务实测返回 6990 ✓)")
|
|||
|
|
|
|||
|
|
# start_time 在两种会话时区下的呈现(TIMESTAMP 列按会话时区转换)
|
|||
|
|
cur.execute("SET time_zone = '+08:00'")
|
|||
|
|
cur.execute("SELECT id, cabinet_id, start_time FROM charge_records ORDER BY id LIMIT 3")
|
|||
|
|
print("+08:00 会话读 start_time :", cur.fetchall())
|
|||
|
|
cur.execute("SET time_zone = '+00:00'")
|
|||
|
|
cur.execute("SELECT id, cabinet_id, start_time FROM charge_records ORDER BY id LIMIT 3")
|
|||
|
|
print("+00:00 会话读 start_time :", cur.fetchall())
|
|||
|
|
|
|||
|
|
cur.close()
|
|||
|
|
conn.close()
|