Files
ailine/backend/app/db/init_db.py
root 5b12188d45
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m11s
修复:PostgreSQL 语法适配 + UUID 自动生成
2026-04-27 16:38:39 +08:00

104 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
子图数据库表初始化
在 FastAPI 启动时创建表
"""
from typing import Optional
async def init_subgraph_tables(conn):
"""
初始化子图所需的表
Args:
conn: 数据库连接(来自 AsyncPostgresSaver
"""
# 1. contacts 表(通讯录)
await _create_contacts_table(conn)
# 2. words 表(词典)
await _create_words_table(conn)
# 3. news 表(资讯)
await _create_news_table(conn)
async def _create_contacts_table(conn):
"""创建 contacts 表"""
sql = """
CREATE TABLE IF NOT EXISTS contacts (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
name VARCHAR(100) NOT NULL,
phone VARCHAR(32),
email VARCHAR(100),
company VARCHAR(100),
position VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
"""
try:
async with conn.cursor() as cur:
await cur.execute(sql)
await _create_index_if_not_exists(conn, "idx_contacts_user", "contacts", "user_id")
except Exception as e:
print(f"contacts 表可能已存在: {e}")
async def _create_words_table(conn):
"""创建 words 表"""
sql = """
CREATE TABLE IF NOT EXISTS words (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
word VARCHAR(100) NOT NULL,
phonetic VARCHAR(100),
part_of_speech VARCHAR(50),
definition TEXT,
examples TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
"""
try:
async with conn.cursor() as cur:
await cur.execute(sql)
await _create_index_if_not_exists(conn, "idx_words_user", "words", "user_id")
await _create_index_if_not_exists(conn, "idx_words_word", "words", "word")
except Exception as e:
print(f"words 表可能已存在: {e}")
async def _create_news_table(conn):
"""创建 news 表"""
sql = """
CREATE TABLE IF NOT EXISTS news (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
title VARCHAR(200) NOT NULL,
content TEXT,
url VARCHAR(500),
source VARCHAR(100),
keywords TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
"""
try:
async with conn.cursor() as cur:
await cur.execute(sql)
await _create_index_if_not_exists(conn, "idx_news_user", "news", "user_id")
except Exception as e:
print(f"news 表可能已存在: {e}")
async def _create_index_if_not_exists(conn, index_name: str, table_name: str, column_name: str):
"""创建索引(如果不存在)"""
sql = f"CREATE INDEX IF NOT EXISTS {index_name} ON {table_name} ({column_name});"
try:
async with conn.cursor() as cur:
await cur.execute(sql)
except Exception as e:
print(f"索引 {index_name} 可能已存在: {e}")