优化上段代码,对比每个表截至今天凌晨的数据量是否一致
时间: 2024-02-10 08:10:52 浏览: 83
在EXCEL中比较数据库表的字段是否一致
5星 · 资源好评率100%
以下是对上段代码的优化,用于比较 MySQL 数据库和 Hologres 数据库中每个表截至今天凌晨的数据量是否一致,并输出不一致的表名:
```python
from datetime import datetime, timedelta
import psycopg2
import mysql.connector
# Hologres 数据库连接参数
hologres_host = "your-hologres-host"
hologres_port = "your-hologres-port"
hologres_user = "your-hologres-username"
hologres_password = "your-hologres-password"
hologres_database = "your-hologres-database"
# MySQL 数据库连接参数
mysql_host = "your-mysql-host"
mysql_port = "your-mysql-port"
mysql_user = "your-mysql-username"
mysql_password = "your-mysql-password"
mysql_database = "your-mysql-database"
# 截至今天凌晨的时间
today = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)
# 连接 Hologres 数据库
hologres_conn = psycopg2.connect(host=hologres_host, port=hologres_port, user=hologres_user, password=hologres_password, database=hologres_database)
hologres_cursor = hologres_conn.cursor()
# 连接 MySQL 数据库
mysql_conn = mysql.connector.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, database=mysql_database)
mysql_cursor = mysql_conn.cursor()
# 查询 Hologres 数据库中所有表的记录数
hologres_cursor.execute("SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'public'")
hologres_tables = dict(hologres_cursor.fetchall())
# 查询 MySQL 数据库中所有表的记录数
mysql_cursor.execute("SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = '{}'".format(mysql_database))
mysql_tables = dict(mysql_cursor.fetchall())
# 比较两个字典中的表记录数是否一致
diff_tables = set(hologres_tables.keys()) ^ set(mysql_tables.keys())
for table in diff_tables:
if table in hologres_tables and table in mysql_tables:
# 查询 Hologres 数据库中表截至今天凌晨的记录数
hologres_cursor.execute("SELECT count(*) FROM {} WHERE created_at < %s".format(table), (today,))
hologres_rows = hologres_cursor.fetchone()[0]
# 查询 MySQL 数据库中表截至今天凌晨的记录数
mysql_cursor.execute("SELECT count(*) FROM {} WHERE created_at < %s".format(table), (today,))
mysql_rows = mysql_cursor.fetchone()[0]
# 比较 Hologres 和 MySQL 中表截至今天凌晨的记录数是否一致
if hologres_rows != mysql_rows:
print("表 {} 在 Hologres 和 MySQL 中截至今天凌晨的记录数不一致!Hologres 记录数为 {},MySQL 记录数为 {}".format(table, hologres_rows, mysql_rows))
# 关闭数据库连接
hologres_cursor.close()
hologres_conn.close()
mysql_cursor.close()
mysql_conn.close()
```
此代码优化了比较每个表记录数的方式,只比较截至今天凌晨的记录数,而不是全部记录数,这样可以减少比较的数据量,提高脚本的执行效率。
阅读全文