"""创建会议室预定相关表 - 直接 SQL 执行(绕过 alembic)""" import asyncio from sqlalchemy import text from app.database import _get_engine SQL = """ -- 1. 终端-会议室绑定表 CREATE TABLE IF NOT EXISTS terminal_room_binding ( id SERIAL PRIMARY KEY, terminal_sn VARCHAR(64) NOT NULL, terminal_name VARCHAR(100) NOT NULL DEFAULT '', meetingroom_id INTEGER NOT NULL, meetingroom_name VARCHAR(100) NOT NULL DEFAULT '', location VARCHAR(200) NOT NULL DEFAULT '', is_active BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMP NOT NULL DEFAULT NOW(), updated_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE UNIQUE INDEX IF NOT EXISTS ix_terminal_room_binding_terminal_sn ON terminal_room_binding (terminal_sn); CREATE INDEX IF NOT EXISTS ix_terminal_room_binding_meetingroom_id ON terminal_room_binding (meetingroom_id); -- 2. 会议室预定记录快照表 CREATE TABLE IF NOT EXISTS meetingroom_booking_snapshot ( id SERIAL PRIMARY KEY, meetingroom_id INTEGER NOT NULL, booking_id VARCHAR(64) NOT NULL, subject VARCHAR(200) NOT NULL DEFAULT '', booker VARCHAR(64) NOT NULL DEFAULT '', start_time TIMESTAMP NOT NULL, end_time TIMESTAMP NOT NULL, status INTEGER NOT NULL DEFAULT 0, snapshot_date DATE NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS ix_meetingroom_booking_snapshot_meetingroom_id ON meetingroom_booking_snapshot (meetingroom_id); CREATE INDEX IF NOT EXISTS ix_meetingroom_booking_snapshot_booking_id ON meetingroom_booking_snapshot (booking_id); CREATE INDEX IF NOT EXISTS ix_meetingroom_booking_snapshot_snapshot_date ON meetingroom_booking_snapshot (snapshot_date); """ async def main(): engine = _get_engine() async with engine.begin() as conn: for stmt in SQL.strip().split(';'): stmt = stmt.strip() if stmt and not stmt.startswith('--'): print(f" Executing: {stmt[:60]}...") await conn.execute(text(stmt)) print("\n✅ All tables created successfully!") # Verify result = await conn.execute(text( "SELECT table_name FROM information_schema.tables " "WHERE table_name IN ('terminal_room_binding', 'meetingroom_booking_snapshot')" )) tables = [r[0] for r in result] print(f"Verified tables: {tables}") asyncio.run(main())