数据库 数据校验写入等逻辑更新。
This commit is contained in:
153
query_db.py
Normal file
153
query_db.py
Normal file
@@ -0,0 +1,153 @@
|
||||
import psycopg2
|
||||
|
||||
# Database connection
|
||||
dsn = 'postgresql://local-Python:Neo-local-1991125@100.64.0.4:5432/LLZQ-test'
|
||||
|
||||
conn = psycopg2.connect(dsn)
|
||||
cur = conn.cursor()
|
||||
|
||||
print('=' * 80)
|
||||
print('1. ALL SCHEMAS')
|
||||
print('=' * 80)
|
||||
cur.execute("""
|
||||
SELECT schema_name FROM information_schema.schemata
|
||||
WHERE schema_name NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
|
||||
ORDER BY schema_name;
|
||||
""")
|
||||
for row in cur.fetchall():
|
||||
print(row[0])
|
||||
|
||||
print()
|
||||
print('=' * 80)
|
||||
print('2. TABLES IN BUSINESS SCHEMAS')
|
||||
print('=' * 80)
|
||||
cur.execute("""
|
||||
SELECT table_schema, table_name, table_type
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema IN ('billiards', 'billiards_ods', 'billiards_dwd', 'billiards_dws', 'etl_admin')
|
||||
ORDER BY table_schema, table_name;
|
||||
""")
|
||||
print(f"{'Schema':<20} {'Table Name':<50} {'Type':<15}")
|
||||
print('-' * 85)
|
||||
for row in cur.fetchall():
|
||||
print(f"{row[0]:<20} {row[1]:<50} {row[2]:<15}")
|
||||
|
||||
print()
|
||||
print('=' * 80)
|
||||
print('3. COLUMN DETAILS FOR billiards_dwd SCHEMA')
|
||||
print('=' * 80)
|
||||
cur.execute("""
|
||||
SELECT
|
||||
c.table_schema,
|
||||
c.table_name,
|
||||
c.column_name,
|
||||
c.data_type,
|
||||
c.character_maximum_length,
|
||||
c.numeric_precision,
|
||||
c.numeric_scale,
|
||||
c.is_nullable,
|
||||
c.column_default,
|
||||
c.ordinal_position
|
||||
FROM information_schema.columns c
|
||||
WHERE c.table_schema = 'billiards_dwd'
|
||||
ORDER BY c.table_name, c.ordinal_position;
|
||||
""")
|
||||
current_table = None
|
||||
for row in cur.fetchall():
|
||||
if current_table != row[1]:
|
||||
current_table = row[1]
|
||||
print()
|
||||
print(f"Table: {row[0]}.{row[1]}")
|
||||
print(f"{'#':<4} {'Column':<35} {'Data Type':<25} {'Nullable':<10} {'Default':<30}")
|
||||
print('-' * 110)
|
||||
|
||||
data_type = row[3]
|
||||
if row[4]: # character_maximum_length
|
||||
data_type += f"({row[4]})"
|
||||
elif row[5] and row[6]: # numeric precision and scale
|
||||
data_type += f"({row[5]},{row[6]})"
|
||||
elif row[5]:
|
||||
data_type += f"({row[5]})"
|
||||
|
||||
default_val = str(row[8])[:28] if row[8] else ''
|
||||
print(f"{row[9]:<4} {row[2]:<35} {data_type:<25} {row[7]:<10} {default_val:<30}")
|
||||
|
||||
print()
|
||||
print('=' * 80)
|
||||
print('4. PRIMARY KEYS IN billiards_dwd')
|
||||
print('=' * 80)
|
||||
cur.execute("""
|
||||
SELECT
|
||||
tc.table_schema,
|
||||
tc.table_name,
|
||||
kcu.column_name
|
||||
FROM information_schema.table_constraints tc
|
||||
JOIN information_schema.key_column_usage kcu
|
||||
ON tc.constraint_name = kcu.constraint_name
|
||||
AND tc.table_schema = kcu.table_schema
|
||||
WHERE tc.constraint_type = 'PRIMARY KEY'
|
||||
AND tc.table_schema = 'billiards_dwd'
|
||||
ORDER BY tc.table_name, kcu.ordinal_position;
|
||||
""")
|
||||
print(f"{'Schema':<20} {'Table Name':<40} {'PK Column':<30}")
|
||||
print('-' * 90)
|
||||
for row in cur.fetchall():
|
||||
print(f"{row[0]:<20} {row[1]:<40} {row[2]:<30}")
|
||||
|
||||
print()
|
||||
print('=' * 80)
|
||||
print('5. TABLE COMMENTS IN billiards_dwd')
|
||||
print('=' * 80)
|
||||
cur.execute("""
|
||||
SELECT
|
||||
n.nspname AS schema_name,
|
||||
c.relname AS table_name,
|
||||
d.description AS table_comment
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON n.oid = c.relnamespace
|
||||
LEFT JOIN pg_description d ON d.objoid = c.oid AND d.objsubid = 0
|
||||
WHERE n.nspname = 'billiards_dwd' AND c.relkind = 'r'
|
||||
ORDER BY c.relname;
|
||||
""")
|
||||
print(f"{'Schema':<20} {'Table Name':<40} {'Comment':<50}")
|
||||
print('-' * 110)
|
||||
for row in cur.fetchall():
|
||||
comment = row[2] if row[2] else '(no comment)'
|
||||
print(f"{row[0]:<20} {row[1]:<40} {comment:<50}")
|
||||
|
||||
print()
|
||||
print('=' * 80)
|
||||
print('6. COLUMN COMMENTS IN billiards_dwd')
|
||||
print('=' * 80)
|
||||
cur.execute("""
|
||||
SELECT
|
||||
n.nspname AS schema_name,
|
||||
c.relname AS table_name,
|
||||
a.attname AS column_name,
|
||||
d.description AS column_comment
|
||||
FROM pg_class c
|
||||
JOIN pg_namespace n ON n.oid = c.relnamespace
|
||||
JOIN pg_attribute a ON a.attrelid = c.oid
|
||||
LEFT JOIN pg_description d ON d.objoid = c.oid AND d.objsubid = a.attnum
|
||||
WHERE n.nspname = 'billiards_dwd'
|
||||
AND c.relkind = 'r'
|
||||
AND a.attnum > 0
|
||||
AND NOT a.attisdropped
|
||||
ORDER BY c.relname, a.attnum;
|
||||
""")
|
||||
current_table = None
|
||||
for row in cur.fetchall():
|
||||
if current_table != row[1]:
|
||||
current_table = row[1]
|
||||
print()
|
||||
print(f"Table: {row[0]}.{row[1]}")
|
||||
print(f"{'Column':<35} {'Comment':<60}")
|
||||
print('-' * 95)
|
||||
comment = row[3] if row[3] else '(no comment)'
|
||||
print(f"{row[2]:<35} {comment:<60}")
|
||||
|
||||
conn.close()
|
||||
print()
|
||||
print('=' * 80)
|
||||
print('Query completed successfully!')
|
||||
print('=' * 80)
|
||||
Reference in New Issue
Block a user