Files

44 lines
1.2 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.
"""数据库引擎与初始化。
init_db():
- 若目标库不存在则自动创建(连到默认 postgres 库执行 CREATE DATABASE
- 建表
"""
from __future__ import annotations
import psycopg2
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import config
from models import Base
engine = create_engine(config.DB_URL, pool_pre_ping=True, future=True)
SessionLocal = sessionmaker(bind=engine, autoflush=False, expire_on_commit=False, future=True)
def _ensure_database():
try:
conn = psycopg2.connect(
host=config.PG_HOST, port=config.PG_PORT, user=config.PG_USER,
password=config.PG_PASSWORD, dbname="postgres", connect_timeout=5)
conn.autocommit = True
cur = conn.cursor()
cur.execute("SELECT 1 FROM pg_database WHERE datname = %s", (config.PG_DB,))
if not cur.fetchone():
cur.execute(f'CREATE DATABASE "{config.PG_DB}"')
cur.close()
conn.close()
except Exception as e: # 数据库已存在或无权限时不阻断
print("[db] ensure_database:", repr(e)[:120])
def init_db():
_ensure_database()
Base.metadata.create_all(engine)
print("[db] tables ready")
def get_session():
return SessionLocal()