fix: PostgreSQL 目标库不存在时 initialize() 自动建库并发布 0.2.1
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
import os
|
||||
import uuid
|
||||
|
||||
import asyncpg
|
||||
import pytest
|
||||
from sqlmodel import Field, SQLModel, select
|
||||
|
||||
@@ -72,3 +73,37 @@ async def test_postgres_generate_schemas_false():
|
||||
await session.execute(select(1))
|
||||
finally:
|
||||
await db.dispose()
|
||||
|
||||
|
||||
async def test_postgres_auto_create_missing_database():
|
||||
"""目标库不存在时 initialize() 应自动建库(回归:database "x" does not exist)。"""
|
||||
from sqlalchemy.engine import make_url
|
||||
|
||||
base = make_url(PG_URL)
|
||||
db_name = f"chongming_test_autocreate_{uuid.uuid4().hex[:8]}"
|
||||
url = base.set(database=db_name).render_as_string(hide_password=False)
|
||||
|
||||
db = Database.from_url(url)
|
||||
try:
|
||||
await db.initialize() # 此前这里会因库不存在而抛 OperationalError
|
||||
async with db.get_session() as session:
|
||||
cur = await session.execute(select(1))
|
||||
assert cur.scalar() == 1
|
||||
# 幂等:库已存在时重复 initialize 也应成功(先释放旧引擎连接,便于清理)
|
||||
await db.dispose()
|
||||
await db.initialize()
|
||||
finally:
|
||||
await db.dispose()
|
||||
# 清理:连 postgres 维护库删除测试库
|
||||
maint = base.set(database="postgres")
|
||||
conn = await asyncpg.connect(
|
||||
host=maint.host,
|
||||
port=maint.port,
|
||||
user=maint.username,
|
||||
password=maint.password,
|
||||
database="postgres",
|
||||
)
|
||||
try:
|
||||
await conn.execute(f'DROP DATABASE IF EXISTS "{db_name}"')
|
||||
finally:
|
||||
await conn.close()
|
||||
|
||||
Reference in New Issue
Block a user